{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2026-04-06T14:01:22.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2026-04-06T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"},{"id":1279,"title":"PONG 003: 3-Ball Rectangle, Interactive Download","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\r\n\r\nOther Cody PONG Games:  \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e and \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play PONG 002\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m PONG_Interactive_003c.m\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4 3-Ball PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* Score of 925 or better\r\n\r\n*Scoring:* 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/p\u003e\u003cp\u003eOther Cody PONG Games:  \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e and \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\"\u003ePONG 002\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\"\u003e\u003cp\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\"\u003ePONG_Interactive_003c.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\"\u003e3-Ball PONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Score of 925 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/p\u003e","function_template":"function pdir = PONG_003_solver(paddle,balls)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',1000);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=600; % Return Mission Complete\r\n qballs=3; % quantity of balls 1 to 5\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21]; % x y vx vy  Treated as a Point\r\n  balls=balls(1:qballs,:);\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\nactive=ones(1,size(balls,1));\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits+100*lives % Allow 0 Score\r\n\r\n [curdir]=PONG_003_solver(paddle,balls); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n   for nballs=1:size(balls,1)\r\n    if active(nballs)==0,continue;end\r\n    ball=balls(nballs,:);\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       active(nballs)=0;\r\n       balls(nballs,:)=-50; % Place off screen/ Id as Passed\r\n       if sum(active)==0,lives=lives+1;end % All 3 Balls Lost\r\n       fprintf('Oops Life %i  Ball %i\\n',lives,nballs);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n\r\n        if sum(active)==0\r\n        %balls=[500 500 32 20;500 550 30 18;500 450 28 22]; % x y vx vy  \r\n         balls=[500-100*lives 500 32+12*lives 20-3*lives; ...\r\n                500-100*lives 550 30+11*lives 18-3*lives; ...\r\n                500-100*lives 450 28+10*lives 22-3*lives; ...\r\n                450-100*lives 550 33+11*lives 17-3*lives; ...\r\n                450-100*lives 450 29+10*lives 23-3*lives]; % x y vx vy\r\n         balls=balls(1:qballs,:);\r\n         active=ones(1,size(balls,1));\r\n         break;\r\n        end\r\n\r\n       continue; % Ball Not returned, next ball\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+sum(active)^2; % Multi-Ball Bonus\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n\r\n\r\n      balls(nballs,:)=ball;      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     balls(nballs,:)=ball;\r\n    end % Ball Pass / New Position\r\n\r\n   end % nballs\r\n\r\n  end % j vup\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 75 hit points to Score 925 or Less\r\n\r\nassert(score\u003c=925,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 1000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-17T23:20:24.000Z","updated_at":"2026-02-10T12:14:41.000Z","published_at":"2013-02-18T01:44:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOther Cody PONG Games: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 002\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_003c.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e3-Ball PONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\\n     % x y vx vy  Position and Velocity, 1 - Row per ball\\n     %Passed Balls are [-50 -50 -50 -50]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Score of 925 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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gqcWGt4/56wfykorqpv3Tnn8RwvjtdviMD/p3i/9BFczXV/ENdnigD/p1hP/AI4K5SsKnxM2h8KCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD2H4JjOn65/wBdYP5SUU/4ILnTtd/662/8pKK3g9DGe5xnxMXZ4tA/6c7c/wDkMVx1dr8Uxt8ZKP8Apxtf/RS1xVZS3ZrHYKKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAe0fAxc6br3/Xa3/lJRT/AIEjOma//wBdrb/0GWitFsZy3PN/Gssk2v75ZGdvIjGWOTgDAH5VzldB4x/5Dv8A2xT+Vc/RV+Njp/AgooorMsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPXfgxI6WGtBHZcywZwfZ6Kb8Gv+PHWf8ArpD/ACeiumn8JzVH7xwnjL/kO/8AbFP5Vz9dx4w0eNrFtY81vMEqW/l44xs3ZzXD1hOalOVu5WHqRnD3emgUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0uleH4LmxWed23PyoU9BWHfWps7ySDdu2HGatWWt3dlbmGMqU/h3DO2qE0rzytJI252OSawpxqqbcnoetjK2CnhacKELTW7I6KKK3PJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g3/wAeOs/9dYf5PRR8G/8Ajx1n/rrD/J6K6qfwnNU+IzvGH/Ioyf8AX6n/AKKrzWvS/GH/ACKMn/X6n/oqvNK4YfHP/EzLAfw36sKKKK0O4KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g1/x46z/wBdIf5PRSfBv/jx1n/rrD/J6K6qfwnNU+IyfGV7bDw+9kZl+0m5jk8rvt8rGfzrzuuk8b/8jB/2wj/lXN1zSgoTlbq2PC01Cnp11CiiikdAUUUUAFFamg+H9T8S6mun6VbNPcMCxGQAqjqSTwBVrxN4P1rwjdRQava+V5oJikVgyPjrgj09PesnXpKp7JyXN26js7XMGiiitRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB618G/wDjx1n/AK6w/wAnoo+Df/HjrP8A11h/k9FdVP4TmqfEcT44/wCRh/7YR/yrm66Xxz/yMP8A2wj/APQa5qsavxs1o/w4+gUUUVmaBRRRQB2/wx8a2/grxBLcXkDy2lzF5UhjALpyCCAevTkf4VqfFf4h2HjNrG00uGQWtqWczSqAzsQBgDsBj8fwrzSiuGWXYeWKWLa99aFc75eUKKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOK8c/wDIwj/r3j/9Brmq6bx1/wAjF/27x/8AoNczWNb42aUf4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOL8d/wDIxD/r3i/9Brma6fx5/wAjEP8Ar3i/9BrmKxrfGzSh/Dj6BRRRWZqFFFFABRRRQAUUUUAFFFFABSgZ6UlaFgUCN0313Zdg1jMQqLly36kzlyq5n9KKs3hQzfJj3xVasMVRVCtKkneztccXdXCiiisBhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHrXwb/48dZ/66w/yeij4N/8AHjrP/XWH+T0V1U/hOap8Rxnjz/kYx/17xf8AoNcxXT+Pf+RjH/XvF/6DXMVjV+NmlD+HH0CiiiszUKKKKACiiigAooooAKKKKACjNFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAetfBr/jx1n/rpD/J6KX4Nf8eOs/8AXWH+T0V1U/hOap8Rxnj3/kYx/wBe8X/oNcvXUePf+RkH/XtF/wCg1y9Y1fjZpQ/hx9AooorM1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1v4N/8eOs/wDXWH+T0UfBv/jx1n/rrD/J6K6qfwnNU+I4zx9/yMg/69ov/Qa5euo8ff8AIyD/AK9ov/Qa5esavxs0ofw4+gUUUVmahRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB638G/+PHWf+usP8noo+Df/AB46z/11h/k9FdVP4TmqfEcZ4+/5GQf9e0X/AKDXL11Pj7/kZB/17Rf+g1y1Y1fjZpQ/hR9AooorM1CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD1v4N/wDHjrP/AF1h/k9FHwb/AOPHWf8ArrD/ACeiuqn8JzVPiOM8ff8AIyD/AK9ov/Qa5euo8ff8jIP+vaL/ANBrl6xq/GzSh/Dj6BRRRWZqFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHrfwb/48dZ/66w/yeij4N/8eOs/9dYf5PRXVT+E5qnxHGePf+RjH/XtF/6DXL11Hj3/AJGMf9e8X/oNcvWNb42aUP4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9b+Df/AB46z/11h/k9FHwb/wCPHWf+usP8norqp/Cc1T4ji/Hv/Ixj/r3i/wDQa5ivaZNA0rVvLur2zSWYoFLFmHA4HQ00eDfD3/QMT/v4/wDjWk8LKUm7mFPGQhFRaZ4xRXtcfgrw6z4OmJj/AK6P/jVx/A/hlI+NIiz6+ZJ/8VWbwsl1NFjYPozwiivcX8FeGwBjSY/+/j//ABVIvgnw2Tg6VH/38f8A+Ko+qy7i+vQ7M8Por3JvA/hoHjSo/wDv4/8A8VQPA/hr/oFR/wDfx/8A4qo+ry7lfXIdmeG0V7qPA3hn/oEx/wDfx/8A4ql/4Qbwz/0CY/8Av5J/8VT+ry7j+tw7HhNFe7jwL4Y/6BMf/fyT/wCKpf8AhBfDH/QIj/7+yf8AxVL6vLuP61HseD0V7z/wgnhj/oER/wDf2T/4qlHgPwv/ANAiP/v7J/8AFUfV5dw+sx7HgtFe+f8ACB+F/wDoDx/9/ZP/AIqmnwJ4Y/6BEf8A39k/+Ko+ry7h9Zj2PBaK93PgXwx/0CY/+/sn/wAVSHwL4Zz/AMgmP/v4/wD8VT+ry7i+tR7HhNFe6HwN4a/6BMf/AH8f/wCKpP8AhBvDX/QKj/7+P/8AFUfV5dw+tx7HhlFe4v4H8NjppSD/ALaP/wDFVGfBPhz/AKBaf9/H/wDiqf1aXcX1yHZniVFe2f8ACFeHP+gYn/fx/wDGk/4Qrw7/ANAxP+/j/wCNH1WXcPrkOzPFKK9r/wCEJ8O/9AxP+/j/AONJ/wAIV4d/6Bif9/H/AMaPqsu4fXIdmeK0V7T/AMIX4d/6Bif9/H/xpD4L8Pf9A1P+/j/40/qsu4fXIdmeL0V7P/whnh7/AKBqf9/H/wAaT/hDPD3/AEDU/wC/j/40fVZdw+uQ7M8Zor2X/hDPD/8A0DU/7+P/AI0f8Ib4f/6Byf8Afx/8aPqsu4fXIdmeNUV7J/whvh//AKByf9/H/wAaP+EM8P8A/QOT/v4/+NH1WXcPrkOzPG6K9oXwV4ePXTl/7+P/AI1IPBHhz/oGJ/38f/Gl9Vl3GsXF9DxOivaz4K8OD/mFx/8Afx//AIqom8G+Hh00yP8A7+P/AI0fVZdw+tQ7HjNFexnwd4f/AOgan/fb/wCNN/4Q7QP+gcn/AH23+NP6pLuH1uHY8eor2EeD9A/6Byf99v8A408eDvD/AP0DU/77f/Gj6rLuH1uHY8bor2pPBnh09dLjP/bR/wD4qrMfgnw0eukRH/tpJ/8AFVLw0l1GsTF9DwyivfP+EC8Lsmf7IjB9pZP/AIqs668D+HY87NOUf9tH/wAaFhpPqN4iK6HilFeuN4Q0IHH2Bf8Avtv8aZ/wiOh/8+C/99t/jV/VJ9yfrcex5NRXrP8AwiOh/wDPiv8A323+NJ/wiWh/8+K/99t/jR9Tn3D63DseT0V6v/wiWif8+K/99t/jR/wiWif8+K/99t/jR9Un3D61HseUUV6t/wAInon/AD4r/wB9t/jR/wAInon/AD5L/wB9t/jR9Un3H9aj2PKaK9V/4RPRP+fJf++2/wAaP+ET0T/nyH/fbf40vqk+4fWo9jyqivVP+ET0X/nyH/fbf40n/CJ6L/z5D/vtv8aPqk+4fWo9jyyivU/+EU0X/nyH/fbf40n/AAimi/8APmP++2/xo+qS7h9Zj2PLaK9R/wCEU0b/AJ8x/wB9t/jSf8Iro3/PmP8Avtv8aPqsu4/rMex5fRXqH/CK6N/z5j/vtv8AGk/4RXRv+fMf99n/ABo+qy7h9Yj2PMKK9O/4RbR/+fQf99n/ABo/4RbR/wDn0H/fR/xpfVZdw+sR7E3wiu4Laz1dZXClpISPfAf/ABopiWVvosZNjGI/MIDck5xRW8KfKrMxnUu7o//Z\"}]}"},{"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\"}]}"}],"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":1279,"title":"PONG 003: 3-Ball Rectangle, Interactive Download","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\r\n\r\nOther Cody PONG Games:  \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e and \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play PONG 002\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m PONG_Interactive_003c.m\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4 3-Ball PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* Score of 925 or better\r\n\r\n*Scoring:* 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/p\u003e\u003cp\u003eOther Cody PONG Games:  \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e and \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\"\u003ePONG 002\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG3_300.jpg\"\u003e\u003cp\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\"\u003ePONG_Interactive_003c.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\"\u003e3-Ball PONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\r\n     % x y vx vy  Position and Velocity, 1 - Row per ball\r\n     %Passed Balls are [-50 -50 -50 -50]\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e Score of 925 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/p\u003e","function_template":"function pdir = PONG_003_solver(paddle,balls)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',1000);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=600; % Return Mission Complete\r\n qballs=3; % quantity of balls 1 to 5\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21]; % x y vx vy  Treated as a Point\r\n  balls=balls(1:qballs,:);\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\nactive=ones(1,size(balls,1));\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits+100*lives % Allow 0 Score\r\n\r\n [curdir]=PONG_003_solver(paddle,balls); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n   for nballs=1:size(balls,1)\r\n    if active(nballs)==0,continue;end\r\n    ball=balls(nballs,:);\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       active(nballs)=0;\r\n       balls(nballs,:)=-50; % Place off screen/ Id as Passed\r\n       if sum(active)==0,lives=lives+1;end % All 3 Balls Lost\r\n       fprintf('Oops Life %i  Ball %i\\n',lives,nballs);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n\r\n        if sum(active)==0\r\n        %balls=[500 500 32 20;500 550 30 18;500 450 28 22]; % x y vx vy  \r\n         balls=[500-100*lives 500 32+12*lives 20-3*lives; ...\r\n                500-100*lives 550 30+11*lives 18-3*lives; ...\r\n                500-100*lives 450 28+10*lives 22-3*lives; ...\r\n                450-100*lives 550 33+11*lives 17-3*lives; ...\r\n                450-100*lives 450 29+10*lives 23-3*lives]; % x y vx vy\r\n         balls=balls(1:qballs,:);\r\n         active=ones(1,size(balls,1));\r\n         break;\r\n        end\r\n\r\n       continue; % Ball Not returned, next ball\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+sum(active)^2; % Multi-Ball Bonus\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n\r\n\r\n      balls(nballs,:)=ball;      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     balls(nballs,:)=ball;\r\n    end % Ball Pass / New Position\r\n\r\n   end % nballs\r\n\r\n  end % j vup\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 75 hit points to Score 925 or Less\r\n\r\nassert(score\u003c=925,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 1000,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-17T23:20:24.000Z","updated_at":"2026-02-10T12:14:41.000Z","published_at":"2013-02-18T01:44:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 003 is a rectangular board (2000,1000) with reasonable velocities and precision paddle movement. Three Times the Fun with 3-Balls.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOther Cody PONG Games: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1276-pong-002-rectangle-interactive-download-easier-play\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 002\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the balls alive against a Wall. The balls speeds up on every hit. When all have been missed the next round restarts the balls at new locations. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed. The Balls do not interact with each other.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_003c.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_003c.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_003c.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_003_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_003_video_89.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e3-Ball PONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[     paddle = 500 ; %Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n     balls=[500 500 32 20;500 550 30 18;500 450 28 22;450 550 33 20;450 450 29 21];\\n     % x y vx vy  Position and Velocity, 1 - Row per ball\\n     %Passed Balls are [-50 -50 -50 -50]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Score of 925 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 600 - Hits + 100 * Lives; Hit=(ActiveBalls)^2\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next ball while taking into account multiple ball score bonus. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position, Multi-Ball with Ball-Ball Collision\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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gqcWGt4/56wfykorqpv3Tnn8RwvjtdviMD/p3i/9BFczXV/ENdnigD/p1hP/AI4K5SsKnxM2h8KCiiioKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD2H4JjOn65/wBdYP5SUU/4ILnTtd/662/8pKK3g9DGe5xnxMXZ4tA/6c7c/wDkMVx1dr8Uxt8ZKP8Apxtf/RS1xVZS3ZrHYKKKKkYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAe0fAxc6br3/Xa3/lJRT/AIEjOma//wBdrb/0GWitFsZy3PN/Gssk2v75ZGdvIjGWOTgDAH5VzldB4x/5Dv8A2xT+Vc/RV+Njp/AgooorMsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPXfgxI6WGtBHZcywZwfZ6Kb8Gv+PHWf8ArpD/ACeiumn8JzVH7xwnjL/kO/8AbFP5Vz9dx4w0eNrFtY81vMEqW/l44xs3ZzXD1hOalOVu5WHqRnD3emgUUUVJuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB0uleH4LmxWed23PyoU9BWHfWps7ySDdu2HGatWWt3dlbmGMqU/h3DO2qE0rzytJI252OSawpxqqbcnoetjK2CnhacKELTW7I6KKK3PJCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g3/wAeOs/9dYf5PRR8G/8Ajx1n/rrD/J6K6qfwnNU+IzvGH/Ioyf8AX6n/AKKrzWvS/GH/ACKMn/X6n/oqvNK4YfHP/EzLAfw36sKKKK0O4KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPW/g1/x46z/wBdIf5PRSfBv/jx1n/rrD/J6K6qfwnNU+IyfGV7bDw+9kZl+0m5jk8rvt8rGfzrzuuk8b/8jB/2wj/lXN1zSgoTlbq2PC01Cnp11CiiikdAUUUUAFFamg+H9T8S6mun6VbNPcMCxGQAqjqSTwBVrxN4P1rwjdRQava+V5oJikVgyPjrgj09PesnXpKp7JyXN26js7XMGiiitRBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB618G/wDjx1n/AK6w/wAnoo+Df/HjrP8A11h/k9FdVP4TmqfEcT44/wCRh/7YR/yrm66Xxz/yMP8A2wj/APQa5qsavxs1o/w4+gUUUVmaBRRRQB2/wx8a2/grxBLcXkDy2lzF5UhjALpyCCAevTkf4VqfFf4h2HjNrG00uGQWtqWczSqAzsQBgDsBj8fwrzSiuGWXYeWKWLa99aFc75eUKKKK7iQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9a+Df/HjrP8A11h/k9FHwb/48dZ/66w/yeiuqn8JzVPiOK8c/wDIwj/r3j/9Brmq6bx1/wAjF/27x/8AoNczWNb42aUf4cfQKKKKzNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACii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\"}]}"},{"id":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\"}]}"}],"term":"tag:\"pong\"","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:\"pong\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"pong\"","","\"","pong","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f24a28f7460\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f24a28f73c0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f24a28f6b00\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f24a28f76e0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f24a28f7640\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f24a28f75a0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f24a28f7500\u003e":"tag:\"pong\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f24a28f7500\u003e":"tag:\"pong\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"cody-search","password":"78X075ddcV44","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"pong\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"pong\"","","\"","pong","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f24a28f7460\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f24a28f73c0\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f24a28f6b00\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f24a28f76e0\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f24a28f7640\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f24a28f75a0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f24a28f7500\u003e":"tag:\"pong\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f24a28f7500\u003e":"tag:\"pong\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":1276,"difficulty_rating":"medium"},{"id":1279,"difficulty_rating":"medium"},{"id":1257,"difficulty_rating":"medium"}]}}