{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":1276,"title":"PONG 002: Rectangle, Interactive Download, Easier Play","description":"Variation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003chttp://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download PONG 001\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\u003e\u003e \r\n\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m PONG_Interactive_002b.m\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4 PONG Demo Video\u003e MP4 (Rt Click, Open in New Tab)\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 15 hits, a score of 425 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\r\n\r\n*Near Future:* Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\r\n\r\n\r\n","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\r\nPONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement.\r\nPONG 2 uses plot and fill versus patches to improve video play.\r\nThe faster square version is \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\"\u003ePONG 001\u003c/a\u003e\u003c/p\u003e\u003cimg src = \"https://sites.google.com/site/razapor/matlab_cody/PONG2_300.jpg\"\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at \u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\"\u003ePONG_Interactive_002b.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\"\u003ePONG Demo Video\u003c/a\u003e MP4 (Rt Click, Open in New Tab)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 for Up, -1 for Down, 0-No move\r\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 15 hits, a score of 425 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_002_solver(paddle,ball)\r\n  pdir=randi([-1 1]);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.08; % Speed increase factor\r\n spfy=1.04; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=25; % Paddle Quantized Movement  (1/4 Paddle)\r\n maxLives=4;\r\n maxHits=100; % Return Mission Complete\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 30 20]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_002_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1  of scalar allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0 % Initialize movement history vector\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 30+11*lives 20-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=2000 % To the right\r\n      ball(1)=2000-(ball(1)-2000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 15 hits to Score 425 or Less\r\n\r\nassert(score\u003c=425,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":7,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2013-02-16T18:19:26.000Z","updated_at":"2026-02-10T12:07:15.000Z","published_at":"2013-02-17T00:16:33.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody. PONG 002 is a rectangular board (2000,1000) with slower initial velocities and more precise paddle movement. PONG 2 uses plot and fill versus patches to improve video play. The faster square version is\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/1257-pong-001-player-vs-wall-4-lives-interactive-download\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG 001\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 25) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is rectangular at 2000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_002a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_002b.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_002b.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_002_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_002_video_Life1.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Demo Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e MP4 (Rt Click, Open in New Tab)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 30 20]; % x y vx vy  Positon and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 for Up, -1 for Down, 0-No move\\n   Paddle moves 25*direction, quarter paddle. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 15 hits, a score of 425 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.08*Vx and Vy=1.04*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Multi-Ball Three Wall, Paddle vs Paddle (Mirror), Angle variation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+F3/ACF9V/7B5/8AR0VFL8LP+Qvq3T/kHnqf+m0VFbw2MZ7kHxT/AOR2b/rxtP8A0QlcVXbfFb/keG/68bP/ANJ0riaxe5qgooopDCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDvvhWu7WNWGcf8S8n/AMjRUU74T/8AIa1b/sHHv/03horWLdjOW5mfEdmfxc5Zix+y2wyT/wBMUrkq6v4i/wDI3P8A9ett/wCiUrlKiXxMqHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO4+GZI1XVMEj/AEHsf+m0VFJ8NP8AkK6p/wBeH/taKiuuklyoyla5T+In/I3P/wBett/6JSuUrq/iL/yNz/8AXrbf+iUrlK5p/Ey4fCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8hXVP+vD/ANrRUUfDT/kK6p/14f8AtaKiuun8KM5blP4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4Z/8AIV1P/rx/9rRUUfDP/kK6p/14/wDtaKiuul8KMpblP4if8jc//Xrbf+iUrlK6v4i/8jc//Xrbf+iUrlO9c0/iZcPhQUUUVJQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAdv8ADXH9q6pnH/Hj3OP+W0VFN+G6B9U1LIziyJHt+9jH9aK66d+VGUtyr8RP+Ruf/r1tv/RKVyneur+Iv/I3P/1623/olK5SuafxMuHwoKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+Gf/IV1P8A68f/AGtFRSfDP/kK6p/14f8AtaKiuun8KM5blT4if8jc/wD1623/AKJSuU7V1fxE/wCRuf8A69bb/wBEpXKdq5p/EyofCgoooqSgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA7f4af8AIV1P/rx9f+m0dFHwz/5Cuqf9eH/taKiuun8KM5blP4i/8jc//Xrbf+iUrlK6v4if8jc//Xrb/wDolK5TvXNP4mVD4UFFFFSUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHb/AAz/AOQrqf8A14/+1oqKPhp/yFdU/wCvD1/6bRUV1078qMpblP4i/wDI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\"}]}"}],"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,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEsAhcDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDmdS1HX9K1OGy0nTAth9mgdANMSfezIhcmQqSeSxzng1311Fcx6r5Q8GRXkMrMUlhKIsaBnwCcYzgIeTzuOOmK0NNluDoMF1Y6KmoTgqh3yMu1RbqwA57sAPq1bVg895o73F34bFrdqHxamZ23ED5eeOv449TXRqm7GSSaWxh21sUS2Nx4UtYd1y0c8YKS7Ytow4YgY5J+XBzjtWCLTW0ijK+GdMlkwu8BUVQCM8HOc5OCMADaME5yOq0q51G81GGC88HraW7KxedpX4YKpHHuSw6/w/hU2qzXthcMLDwkl/CqIQVnZCWJYEd+mAScHhhT5nuxcrvo0cst7oEUMUOoaa8V2d3mBbdDt54JxkDIx3PWsu71XwvArJLpU8iZ+8saKDz+dd1HpOn6hpk99c+C7aK9/ebLef52fbnaSR/e4+maxfsijaF+F1sJGi3lzJ8m7PT7v41bnZLQh0m76nIya/4R3kLpN2h3dAicU1df8JFT/wAS26LDkkxpXpuo+G9KgiEln4R064fd88ZQgsuD0PY5wOnesjStH02/vxDdfDOzsrcxEmaVc4YHoRjvx+Y98P2rva39feR7C3U4i51fwlLDt/sy9jyfvFE4/Gmw6l4ZjiKLalcDIZlD7uue2R+Nd1qejWNlqDpbfDewvrVQCropU5xnrg9+MY4qhDbW8UsYm+FVrFvlWNWQ4wCQCT8vYbj1xwPqD20r2t/X3g6FtpHKJfeGInIityoZtzBkDEk9cZXioDfeFIIZG+ySMrYByAQOc8ZHHX9a9N1rw3ptvJa/2f4H0u9MkpSQuu3ylxkP9MjHrWKunwusW/4S2YPl5cBhw2eADt9PXHJ/Ev28r7E/V31mcWup+EDhDbyeWWyW2jcOPXGajm1XwhHtEVhdTrjO5XC9+nNeoxeF9Dl0I3p8A6dDemJnWzdQWDYOFJHHPH0rKstJsZNWis7z4YWFvDIxHng7gAOrEYxjp3/wp+3mtLF+wf8AMcFJq/hEOjJp9xnIyFI9OpyMH9c06XVfCM5Dm3lVtmOFA/kK9h/4QvwtuA/4RPTP+/RpB4L8Lf8AQp6Z0z/qjVKvJfZJ+rv+dnkdtqfhQSsfIcFsbiUByAO2RT5NX8IGII1pdY65EcYI5Pcc16yPBnhb/oU9N6/88jR/whnhbaP+KT0zp/zyNDrybvylKhZ3cjyaPVPCEalUhfDKASwX/A4P0rJvtS0VJdunKiR7SQZVVsemBjP64r3A+C/C/wD0Kem/9+jSf8IV4V5/4pLS+n/PGlGvJO7iUqNnfmPDF1HT5EUMkLMowSqLyfp/9enfatOPSJP+/Yr3H/hCvCv/AEKOl/8Afmj/AIQrwr/0KOl/9+ar6xLoiHhU3fmPD/P0/wD54x/9+x/hQLjT9x/cp7fux/hXuH/CFeFf+hS0z/vzR/whXhXn/iktM/780/rM+iJ+qL+Y8P8AtFjz/o4/79j/AAp3n2P/AD7rnP8AcH+Fe3DwV4V5/wCKT0z/AL8mj/hCvC3/AEKemdf+eRo+tT7C+qL+Y8RM9hu/4916f3B/hThPYbv+PaPGe6r/AIV7Z/whfhb/AKFPTen/ADyNKPBfhfd/yKemdf8AnjS+s1OiX9fMHg/7x4n5tjt/49Y/++R/hTg9lt/49U6/3B/hXtX/AAhvhfB/4pPTf+/Ro/4Q3wx/0Kmm9f8AnkaaxUusRfU/7x4qXsv+fWPp/cH+FLvst3/HnH1/uD/Cvaf+EN8Mf9CppvT/AJ5GnDwd4Y3Y/wCEV03rj/VGq+svsL6l/ePFA9p/z6J/3wP8KTfZf8+qZ/3B/hXtf/CH+GSp/wCKV03p08o0n/CG+F/+hU03r/zyNDxL6IPqX948UMlj/wA+qdMkbB/hShrJ32raoSTx8o/wr2r/AIQ3wv8A9CppnT/nkaenhDw3HLmPwtpqsDkERH86X1qd9Yj+p/3jxtdOzyLAYxn7q019NO3AsgrE8Hav+H8+K9uXQtHGSNBtAcc4U/40v9h6R/0ArXr6N/jR9alf4QWEad3I8YSzsEcK+mSFVXkhvm79eefzNPaDSPN40qRvnxyOn4Zr2P8AsPSB/wAwK15Ho3+NO/sLSN//ACArXrjo1JYmS6GypPe/4njEcOlIhP8AY4CqOrheOfc8VJ9r00JxpyAA4GDH/jXsX9g6Qf8AmBWnT0b/ABo/sHR/+gFa9fRv8aHiL7xB0W3rY8dF7poXH9mx8jBx5f8AjUf2uw3nFlEqnsRHx+tey/2Do4X/AJAVryOmG/xpRoOjjgaFa4JHZqTrJ/ZE6Kf/AA54XJr2kwO0UtjEpUZwVX/4mlj17SpGO2wjZ8gYwvX/AL5r2g+DvDDszN4U0wswySYetIPBnhfaf+KT0wDOf9TUqs19kf1eNtzxFra2dzK8EWG5BOOn16UC0si2BDCfbAr3QeGPD46eGtPGRg4jP+e1OHhvQgw/4pywHTkRmtPbq97Gbw8m2+Y8JFnaf8+8R49BR9itv+faL8hXu48O6J/0Ltl0/uGmnwzoByT4bsMnrmM0/rC/lJ+rT/mPCWsbbbkWsZP0qB7JM8WkeMdhXvbeF/Dzr83hnT2HJwYjTT4T8Od/C2m9B1iprEJfZGsNJbyPAzZjcf8ARUxzj5elN+x/9Oq/98Cvf/8AhE/Dm4/8UtpvfnyetIPCfhwZx4W00dP+WNN4lfylfV3/ADI8B+yf9Oo6/wBwf4UGzi7wKOP7g/wr3/8A4RTw5/0LGm9f+eVO/wCEX8Pf9Czp3T/nkazlXi94h7CXdHgH2K13f6lOvQqP8KBaWoX/AFMZ464Fe/8A/CL+H92P+EZ07r/zyoHhfw/z/wAUzp3/AH6NTzw/kX4C+ry/mPAPslt/zwj6+lL9mtx0iQDHoP8ACvfv+EX8Pf8AQs6d1/55Uf8ACL+H/wDoWdO6f88qcakE7qH5B7Ca+0eDQiKNyPs0bAnsgOP0qzJBbXduYJbdY+hLxqBj8cV7j/wi/h/d/wAi1p/Xr5Rpq+FvDycr4Z04HGMiI03XV78pSozTTUjxiW7+yeRKLaydVmUh1iUsAB3Q8N+B9K1rjUb17eD7LpMO8FDK01pFgkMCdoAGBjPBJPSvVU8O6HHynh2xU56iMinHQtH286DanjOMH/GolNOz5TTkduh5DPcaqbeRVtYDK75Je3iwo3KcKMdgDz6GmGW/2MJbaBm8pgpSKNNrEjDEBTnHpx1r2MaFo+//AJAVr164P+NL/Yul/wDQDtuno3+Nc06am7tP8DopVqtOLira/wBdzxPVI726hklurK3Fqg3KRAiYbcoGCBk9TRXo/iDToZNNuhNokOniOYpE6TbhOmUIbH8PJIweciilGmoqw6ledSV3b7i9o5NvoizI0qqYcKsVqZi0vkxbc4U4/MA1t3dzcJe2sEenbdzQGQi3dgQxAYZxgYBPUjGBXzd4g8eeIrLVjHpWsXtjbGCAiGGUquREgJx74rK/4WR40/6GfVP/AAIasa0XJ2TtqKm0lZo+lZdVvz45g0aHRLpbIXREt4bb9y0XkscBsdd+Oc47VY0zU7i91XVLOfR7m3jtoSyzS2xRQ4YjAbGHyCp4JHB9a+Yv+Fk+NP8AoaNU/wDAhqQ/EjxoevifUyP+vhquUr7CsfVU09xbeNINPOmSy6bcxYSZIBsicBmJZ855wBjB5I57EvVvrd7K6gskuLARg3KRrulJJHKjGTwTwD2r5W/4WR40/wChn1T/AMCGo/4WR40/6GfU/wDwIapux2R9YTRXFvrEZe0EmnysIwY4wxRiOrDqBnvnAzVS2j1I+I3hlgiFpvlHkmHhYwBscPgDJOPlyep9Dj5Z/wCFk+NP+hn1T/wIaj/hZHjT/oZ9U/8AAg0+Zisj6G8NXnie4vtUtr+waZrdJhGZrQQoXUjywpwMhssOrfdzn11dM1a5/wCEfvdXvdGvTJHGrx6d9l23AYlhsAA5z8vPpmvmT/hZHjT/AKGfVP8AwIal/wCFkeNP+hn1P/wIalL3mmCVj6p0A397aSz6lo/2adrraLeQgCKLAwQw+/6npySB0rD8R3uq2F/amyS5MDJG3l2+mC4WX94BIGccodpGBgCvnL/hZHjT/oZ9U/8AAhqB8SPGg6eJ9T/8CDT5nccrPY+qPEKyW1lusxLERdhHa3tvPZU2Z4Xa38WOccZrH1a41i3tLE28Fws0mmrK4jsBIDcY5DcfLz24r5vHxH8advE+p/8AgQ1H/CyfGn/Q0ap/4ENQpW3FbW59X36XEenPLY2cctyJUG0x7sKVUngEdzXOeJL7V7OKxe3tL6FpbNpHSz0z7TiYEfK2Qdv0+tfOX/CyPGn/AEM+p/8AgQ1L/wALI8af9DRqn/gQ1JOzuDR9f2VpHJp9s9xboJmiRpAVxhiBnjtzmp/sVt/zwT8q+OP+FkeNP+hn1P8A8CDR/wALI8af9DPqf/gQaLjPsf7Fbf8APBPyo+xW3/PCP8q+OP8AhZHjT/oZ9T/8CDR/wsjxp/0M+p/+BBouB9j/AGK2/wCeCflR9itv+eEf5V8cf8LI8af9DPqf/gQaP+FkeNP+hn1P/wACDRcD7H+xW3/PCP8AKj7Fbf8APBPyr44/4WR40/6GfU//AAINH/CyPGn/AEM+p/8AgQaLgfY/2K2/54R/lR9itv8AnhH+VfHH/CyPGn/Qz6n/AOBBo/4WR40/6GfU/wDwINFwPsf7Fbf88I/yo+xW3/PBPyr44/4WR40/6GfU/wDwINH/AAsjxp/0M+p/+BBouB9j/Yrb/nhH+VH2K2/54J+VfHH/AAsjxp/0M+p/+BBo/wCFkeNP+hn1P/wINFwPsf7Fbf8APBPyo+xW3/PBPyr44/4WR40/6GfU/wDwINH/AAsjxp/0M+p/+BBouB9j/Yrb/nhH+VH2K2/54R/lXxx/wsjxp/0M+p/+BBo/4WR40/6GfU//AAINFwPsf7Fbf88E/Kj7Fbf88E/Kvjj/AIWR40/6GfU//Ag0f8LI8af9DPqf/gQaLgfY/wBitv8Angn5UfYrb/nhH+VfHH/CyPGn/Qz6n/4EGj/hZHjT/oZ9T/8AAg0XA+x/sVt/zwj/ACo+xW3/ADwT8q+OP+FkeNP+hn1P/wACDR/wsjxp/wBDPqf/AIEGi4H2P9itv+eCflR9itv+eEf5V8cf8LI8af8AQz6n/wCBBo/4WR40/wChn1P/AMCDRcD7H+xW3/PBPyo+xW3/ADwT8q+OP+FkeNP+hn1P/wACDR/wsjxp/wBDPqf/AIEGi4H2P9itv+eEf5UfYrb/AJ4R/lXxx/wsjxp/0M+p/wDgQaP+FkeNP+hn1P8A8CDRcD7H+xW3/PBPyo+xW3/PBPyr44/4WR40/wChn1P/AMCDR/wsjxp/0M+p/wDgQaLgfY/2K2/54J+VH2K2/wCeEf5V8cf8LI8af9DPqf8A4EGj/hZHjT/oZ9T/APAg0XA+x/sVt/zwj/Kj7Fbf88E/Kvjj/hZHjT/oZ9T/APAg0f8ACyPGn/Qz6n/4EGi4H2P9itv+eEf5UfYrb/ngn5V8cf8ACyPGn/Qz6n/4EGj/AIWR40/6GfU//Ag0XA+x/sVt/wA8E/Kj7Fbf88E/Kvjj/hZHjT/oZ9T/APAg0f8ACyPGn/Qz6n/4EGi4H2P9itv+eCflR9itv+eEf5V8cf8ACyPGn/Qz6n/4EGj/AIWR40/6GfU//Ag0XA+x/sVt/wA8I/yo+xW3/PBPyr44/wCFkeNP+hn1P/wINH/CyPGn/Qz6n/4EGi4H2P8AYrb/AJ4J+VH2K2/54J+VfHH/AAsjxp/0M+p/+BBo/wCFkeNP+hn1P/wINFwPsf7Fbf8APCP8qPsVt/zwj/Kvjj/hZHjT/oZ9T/8AAg0f8LI8af8AQz6n/wCBBouB9j/Yrb/ngn5UfYrb/ngn5V8cf8LI8af9DPqf/gQaP+FkeNP+hn1P/wACDRcD6h8b28UWjqY41Qk4yPqtFeEeBfFWv6/qGo2+r6td3sMdkZES4lLAN5sYzj6E/nRWkL2MJ7nFeLbe4tteaK5/1vkQk/QxqR+hFYVdR8QJfO8Us5xza23T/rilcvUS0bRtHYSiiipGFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHd/C3/kL6r/ANg8/wDo6Kij4Xf8hfVf+wef/R0VFbw+ExnuZ3xBhWDxWyL0+y2xHHrChrla7H4mjHjNuMf6FanH/bBK46spO7bNI7IKKKKkoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO7+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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\"}]}"}],"term":"tag:\"dlglist\"","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:\"dlglist\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"dlglist\"","","\"","dlglist","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f534ac10f08\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f534ac10e68\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f534ac105a8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f534ac11188\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f534ac110e8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f534ac11048\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f534ac10fa8\u003e":"tag:\"dlglist\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f534ac10fa8\u003e":"tag:\"dlglist\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"dlglist\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"dlglist\"","","\"","dlglist","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f534ac10f08\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f534ac10e68\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f534ac105a8\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f534ac11188\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f534ac110e8\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f534ac11048\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f534ac10fa8\u003e":"tag:\"dlglist\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f534ac10fa8\u003e":"tag:\"dlglist\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":1276,"difficulty_rating":"medium"}]}}