{"group":{"group":{"id":33,"name":"Computer Games I","lockable":false,"created_at":"2017-09-27T16:37:22.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Test your MATLAB skills at playing or solving computer games.","is_default":false,"created_by":26769,"badge_id":47,"featured":false,"trending":false,"solution_count_in_trending_period":8,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":29,"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":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTest your MATLAB skills at playing or solving computer games.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}","description_html":"\u003cdiv style = \"text-align: start; line-height: normal; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"display: block; min-width: 0px; padding-top: 0px; perspective-origin: 289.5px 10.5px; transform-origin: 289.5px 10.5px; \"\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; white-space: pre-wrap; perspective-origin: 266.5px 10.5px; transform-origin: 266.5px 10.5px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eTest your MATLAB skills at playing or solving computer games.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","published_at":"2018-03-01T19:52:56.000Z"},"current_player":null},"problems":[{"id":173,"title":"Minefield Sonar","description":"*Background*\r\n\r\nIn mine-hunting games (e.g. Microsoft Minesweeper), the user is provided with a covered grid that, upon a left click, uncovers a hint as to the bombs around it or a bomb itself. The goal of this problem is to generate this grid based on the placement of a number of bombs and the puzzle size.\r\n\r\nMore information can be found on the \u003chttp://en.wikipedia.org/wiki/Minesweeper_(computer_game) Wikipedia page\u003e.\r\n\r\n*Description*\r\n\r\nYou are provided with the row and column of _K_ mines on a grid, _I_ and _J_ respectively, as well as the number of rows and columns on the grid, _M_ and _N_ respectively. Using this information, generate an _M_ x _N_ grid where the values on the grid represent the number of mines adjacent to that square or, if there is a mine on that particular square, the value -1.\r\n\r\n*Example*\r\n\r\n","description_html":"\u003cp\u003e\u003cb\u003eBackground\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIn mine-hunting games (e.g. Microsoft Minesweeper), the user is provided with a covered grid that, upon a left click, uncovers a hint as to the bombs around it or a bomb itself. The goal of this problem is to generate this grid based on the placement of a number of bombs and the puzzle size.\u003c/p\u003e\u003cp\u003eMore information can be found on the \u003ca href=\"http://en.wikipedia.org/wiki/Minesweeper_(computer_game)\"\u003eWikipedia page\u003c/a\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/p\u003e\u003cp\u003eYou are provided with the row and column of \u003ci\u003eK\u003c/i\u003e mines on a grid, \u003ci\u003eI\u003c/i\u003e and \u003ci\u003eJ\u003c/i\u003e respectively, as well as the number of rows and columns on the grid, \u003ci\u003eM\u003c/i\u003e and \u003ci\u003eN\u003c/i\u003e respectively. Using this information, generate an \u003ci\u003eM\u003c/i\u003e x \u003ci\u003eN\u003c/i\u003e grid where the values on the grid represent the number of mines adjacent to that square or, if there is a mine on that particular square, the value -1.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e","function_template":"function y = minehunting(I,J,M,N)\r\n    y = zeros(M,N);\r\nend","test_suite":"%%\r\nI = [ 2 3 3 5 1 4 9 2 3 9 ];\r\nJ = [ 1 1 4 4 5 5 6 8 8 9 ];\r\nM = 9; N = 9;\r\ny_correct = [  1  1  0  1 -1  1  1  1  1\r\n              -1  2  1  2  2  1  2 -1  2\r\n              -1  2  1 -1  2  1  2 -1  2\r\n               1  1  2  3 -1  1  1  1  1\r\n               0  0  1 -1  2  1  0  0  0\r\n               0  0  1  1  1  0  0  0  0\r\n               0  0  0  0  0  0  0  0  0\r\n               0  0  0  0  1  1  1  1  1\r\n               0  0  0  0  1 -1  1  1 -1 ];\r\nassert(isequal(minehunting(I,J,M,N),y_correct))\r\n\r\n%%\r\nI = 9; J = 9; M = 9; N = 9;\r\ny_correct = [ 0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  1  1\r\n              0  0  0  0  0  0  0  1 -1 ];\r\nassert(isequal(minehunting(I,J,M,N),y_correct))\r\n\r\n%%\r\nI = 5; J = 5; M = 9; N = 9;\r\ny_correct = [ 0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  1  1  1  0  0  0\r\n              0  0  0  1 -1  1  0  0  0\r\n              0  0  0  1  1  1  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0\r\n              0  0  0  0  0  0  0  0  0 ];\r\nassert(isequal(minehunting(I,J,M,N),y_correct))\r\n\r\n%%\r\n[I,J] = ndgrid(1:2:11,1:2:5);\r\nM = 11; N = 5;\r\ny_correct = [ -1  2 -1  2 -1\r\n               2  4  2  4  2\r\n              -1  2 -1  2 -1\r\n               2  4  2  4  2\r\n              -1  2 -1  2 -1\r\n               2  4  2  4  2\r\n              -1  2 -1  2 -1\r\n               2  4  2  4  2\r\n              -1  2 -1  2 -1\r\n               2  4  2  4  2\r\n              -1  2 -1  2 -1 ];\r\nassert(isequal(minehunting(I,J,M,N),y_correct))\r\n\r\n%%\r\n[I,J] = ndgrid(2:3:11,2:3:5);\r\nM = 11; N = 5;\r\ny_correct = [ 1  1  1  1  1\r\n              1 -1  1  1 -1\r\n              1  1  1  1  1\r\n              1  1  1  1  1\r\n              1 -1  1  1 -1\r\n              1  1  1  1  1\r\n              1  1  1  1  1\r\n              1 -1  1  1 -1\r\n              1  1  1  1  1\r\n              1  1  1  1  1\r\n              1 -1  1  1 -1 ];\r\nassert(isequal(minehunting(I,J,M,N),y_correct))\r\n\r\n","published":true,"deleted":false,"likes_count":23,"comments_count":1,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":307,"test_suite_updated_at":"2012-01-30T07:18:52.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2012-01-30T07:11:24.000Z","updated_at":"2026-03-09T11:47:11.000Z","published_at":"2012-01-30T07:18:52.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eBackground\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn mine-hunting games (e.g. Microsoft Minesweeper), the user is provided with a covered grid that, upon a left click, uncovers a hint as to the bombs around it or a bomb itself. The goal of this problem is to generate this grid based on the placement of a number of bombs and the puzzle size.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMore information can be found on the\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Minesweeper_(computer_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eWikipedia page\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDescription\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are provided with the row and column of\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eK\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e mines on a grid,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eI\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eJ\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e respectively, as well as the number of rows and columns on the grid,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e respectively. Using this information, generate an\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e grid where the values on the grid represent the number of mines adjacent to that square or, if there is a mine on that particular square, the value -1.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":283,"title":"Give the Shortest Path Through The Maze","description":"*Description*\r\n\r\nThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size _M_ x _N_ where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\r\n\r\n                                           +   +\r\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \r\n                 NW                        +   + \r\n\r\n                                           +   +\r\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\r\n                 NW                        +   +\r\n                                           \r\n                                           +---+\r\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \r\n                 NW                        +   +\r\n\r\n                                           +---+\r\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\r\n                                           +   +\r\n\r\n_Note: all outer boundaries are walls. My test cases provide for this already. You do *not* need to account for this._\r\n\r\nThe path will always start at the NorthWest corner (subscript |(1,1)|) and end at the SouthEast corner (subscript |(M,N)|). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\r\n\r\n    path = [  1   2   0   0   0   0 \r\n              4   3   0   9  10   0\r\n              5   6   7   8  11   0 \r\n              0   0   0   0  12  13 ]\r\n\r\nwhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\r\n\r\nYou are *NOT* guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\r\n\r\n*Example*\r\n\r\nInput maze:\r\n\r\n    maze = [  3  2  2  2  3\r\n              1  3  2  2  3\r\n              1  3  2  3  1\r\n              1  1  0  2  0\r\n              1  0  2  1  1  ];\r\n    \r\nGraphical Representation:\r\n\r\n    +---+---+---+---+---+\r\n    |               |   |\r\n    +   +---+---+---+---+\r\n    |   |           |   |\r\n    +   +---+---+---+   +\r\n    |   |       |   |   |\r\n    +   +   +   +---+   +\r\n    |   |               |\r\n    +   +   +---+   +   +\r\n    |           |   |   |\r\n    +---+---+---+---+---+\r\n\r\nSolution:\r\n\r\n    soln = [  1   0   0   0   0\r\n              2   0   0   0   0\r\n              3   0   0   0   0\r\n              4   7   8   9  10\r\n              5   6   0   0  11 ]\r\n\r\nGraphical Representation:\r\n\r\n    \r\n    +---+---+---+---+---+\r\n    | 1             |   |\r\n    +   +---+---+---+---+\r\n    | 2 |           |   |\r\n    +   +---+---+---+   +\r\n    | 3 |       |   |   |\r\n    +   +   +   +---+   +\r\n    | 4 | 7   8   9  10 |\r\n    +   +   +---+   +   +\r\n    | 5   6     |   |11 |\r\n    +---+---+---+---+---+","description_html":"\u003cp\u003e\u003cb\u003eDescription\u003c/b\u003e\u003c/p\u003e\u003cp\u003eThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size \u003ci\u003eM\u003c/i\u003e x \u003ci\u003eN\u003c/i\u003e where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\u003c/p\u003e\u003cpre\u003e                                           +   +\r\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \r\n                 NW                        +   + \u003c/pre\u003e\u003cpre\u003e                                           +   +\r\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\r\n                 NW                        +   +\u003c/pre\u003e\u003cpre\u003e                                           +---+\r\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \r\n                 NW                        +   +\u003c/pre\u003e\u003cpre\u003e                                           +---+\r\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\r\n                                           +   +\u003c/pre\u003e\u003cp\u003e\u003ci\u003eNote: all outer boundaries are walls. My test cases provide for this already. You do \u003cb\u003enot\u003c/b\u003e need to account for this.\u003c/i\u003e\u003c/p\u003e\u003cp\u003eThe path will always start at the NorthWest corner (subscript \u003ctt\u003e(1,1)\u003c/tt\u003e) and end at the SouthEast corner (subscript \u003ctt\u003e(M,N)\u003c/tt\u003e). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\u003c/p\u003e\u003cpre\u003e    path = [  1   2   0   0   0   0 \r\n              4   3   0   9  10   0\r\n              5   6   7   8  11   0 \r\n              0   0   0   0  12  13 ]\u003c/pre\u003e\u003cp\u003ewhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\u003c/p\u003e\u003cp\u003eYou are \u003cb\u003eNOT\u003c/b\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eInput maze:\u003c/p\u003e\u003cpre\u003e    maze = [  3  2  2  2  3\r\n              1  3  2  2  3\r\n              1  3  2  3  1\r\n              1  1  0  2  0\r\n              1  0  2  1  1  ];\u003c/pre\u003e\u003cp\u003eGraphical Representation:\u003c/p\u003e\u003cpre\u003e    +---+---+---+---+---+\r\n    |               |   |\r\n    +   +---+---+---+---+\r\n    |   |           |   |\r\n    +   +---+---+---+   +\r\n    |   |       |   |   |\r\n    +   +   +   +---+   +\r\n    |   |               |\r\n    +   +   +---+   +   +\r\n    |           |   |   |\r\n    +---+---+---+---+---+\u003c/pre\u003e\u003cp\u003eSolution:\u003c/p\u003e\u003cpre\u003e    soln = [  1   0   0   0   0\r\n              2   0   0   0   0\r\n              3   0   0   0   0\r\n              4   7   8   9  10\r\n              5   6   0   0  11 ]\u003c/pre\u003e\u003cp\u003eGraphical Representation:\u003c/p\u003e\u003cpre\u003e    +---+---+---+---+---+\r\n    | 1             |   |\r\n    +   +---+---+---+---+\r\n    | 2 |           |   |\r\n    +   +---+---+---+   +\r\n    | 3 |       |   |   |\r\n    +   +   +   +---+   +\r\n    | 4 | 7   8   9  10 |\r\n    +   +   +---+   +   +\r\n    | 5   6     |   |11 |\r\n    +---+---+---+---+---+\u003c/pre\u003e","function_template":"function path = solve_maze(maze)\r\n  path = zeros( size( maze ) );\r\nend","test_suite":"%%\r\nassert(isequal(solve_maze([3 2;1 2]),[1 0;2 3]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2;3 3 1;1 1 1]),[1 2 3;0 0 4;0 0 5]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 3 2 2 2;1 0 1 2 1;3 2 3 3 0;1 0 2 2 0;1 1 1 0 1]),[1 4 5 6 7;2 3 0 0 8;0 0 0 0 9;0 0 0 0 10;0 0 0 0 11]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 3 3 2 3;3 1 2 1 1 3 1 3;1 0 3 0 0 1 3 3;1 1 0 2 0 0 1 1;3 1 3 3 2 1 2 1;3 2 2 1 3 0 1 0;3 3 2 3 1 2 2 0;1 3 3 0 0 2 0 2;1 2 3 1 0 2 1 3;1 1 3 2 3 1 1 0]),[1 2 0 0 0 0 0 0;0 3 0 0 0 0 0 0;0 4 0 0 0 0 0 0;0 5 6 7 8 9 0 0;0 0 0 0 0 10 11 0;0 0 0 0 12 11 12 13;0 0 0 0 13 14 15 14;0 0 0 0 14 15 16 0;0 0 0 0 0 0 17 0;0 0 0 0 0 0 18 19]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 2 3 3 2 3 3 3 2 3 2 3 2 3;3 0 3 3 1 2 2 3 3 0 2 1 0 1 2 2 0;1 0 2 3 2 1 1 0 0 3 1 0 2 1 1 0 2;3 1 1 2 0 0 2 0 2 3 3 1 0 3 1 0 3;1 0 1 0 3 0 1 0 0 2 2 1 0 2 1 2 1;1 2 0 0 3 1 2 1 2 3 1 1 0 1 3 1 1;3 1 1 3 2 2 2 2 2 1 2 3 2 0 3 1 2;1 3 0 1 0 3 0 2 1 3 2 2 2 1 1 1 2;1 3 3 1 1 1 2 3 2 2 2 2 3 3 2 0 1;3 1 3 0 2 0 2 0 1 0 3 1 2 3 2 0 0;1 1 0 2 3 3 1 2 2 1 3 0 2 3 2 2 0;3 0 0 2 3 3 0 0 2 2 0 0 1 3 1 3 1]),[1 2 0 0 0 0 0 0 0 0 0 0 21 22 0 0 0;0 3 0 0 0 0 0 0 14 15 16 19 20 23 24 0 0;0 4 5 0 0 0 0 12 13 0 17 18 0 0 25 0 0;0 0 6 7 8 9 10 11 0 0 0 0 0 0 26 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 27 28 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 30 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 31 32;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 33;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 33 34;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 35;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 3 3 2 2 2 3 2 3 3 2 2 2 2 2 2 2 2 3 3 2 3 2 3;1 2 2 2 1 1 1 3 0 3 1 1 0 2 3 0 2 0 0 3 3 0 3 1 3;3 1 3 2 3 1 2 2 2 3 3 0 3 3 3 3 3 3 0 0 2 0 3 0 3;3 1 1 1 3 3 3 1 0 1 1 3 3 2 2 2 3 1 3 1 3 1 3 1 0;3 1 3 0 1 3 2 1 1 2 1 0 3 1 3 2 1 0 1 0 2 0 3 2 0;3 0 2 2 2 3 2 1 2 2 0 3 0 0 1 1 0 1 3 1 3 0 2 0 0;3 3 0 0 2 0 3 0 1 1 2 3 1 0 3 1 3 3 0 1 2 3 1 3 2;1 0 2 0 3 1 1 0 3 2 0 0 0 0 0 0 1 3 3 2 2 0 0 2 2;1 2 1 3 2 1 3 1 0 3 2 3 3 3 1 0 1 2 0 1 3 3 0 2 1;1 0 3 2 0 0 3 3 2 2 0 0 3 3 0 1 2 0 2 1 2 0 2 3 3;3 0 2 3 3 2 3 2 1 3 3 1 2 0 3 2 1 0 2 0 1 3 1 2 0;1 0 1 1 2 2 1 2 2 1 3 1 0 3 3 2 3 2 1 2 3 3 3 1 2;1 2 1 0 0 3 3 3 0 1 2 1 1 2 2 0 2 3 3 3 1 0 3 1 3;3 3 2 3 1 2 2 2 1 0 2 0 3 1 3 0 0 2 1 3 0 1 3 0 1;1 2 2 0 0 3 1 1 1 3 1 0 3 3 1 0 2 0 3 3 1 0 0 0 3;1 2 1 2 1 1 0 0 2 0 3 0 0 1 0 0 1 3 0 0 1 3 2 0 1;3 3 1 2 0 1 1 1 1 2 2 0 1 2 1 1 3 0 0 0 1 1 3 0 0;3 2 2 0 0 0 0 3 2 2 1 1 0 0 2 3 1 3 3 3 0 3 1 3 0;1 2 2 0 3 1 2 0 3 1 3 2 3 3 2 1 2 3 3 2 2 1 2 0 0;1 3 1 3 2 1 3 1 2 1 0 0 0 2 1 3 0 3 0 2 3 0 0 0 0]),[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 10 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;12 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;13 14 0 0 0 0 0 0 0 0 0 0 0 0 43 44 0 0 0 0 0 0 0 0 0;14 15 0 0 0 0 0 0 0 0 0 0 0 41 42 45 46 47 0 51 52 53 54 0 0;0 16 17 0 0 0 0 0 0 0 0 38 39 40 0 0 47 48 49 50 0 0 55 56 0;0 0 18 0 0 0 0 0 0 0 0 37 38 0 0 0 0 0 0 0 0 0 0 57 0;0 0 19 20 21 0 0 0 0 0 0 36 0 0 0 0 0 0 0 0 0 0 0 58 0;0 0 0 0 22 23 24 25 0 0 0 35 0 0 0 0 0 0 0 0 0 0 0 59 0;0 0 0 0 0 0 25 26 0 0 0 34 0 0 0 0 0 0 0 0 0 0 0 60 0;0 0 0 0 0 0 26 27 28 0 0 33 0 0 0 0 0 0 0 0 0 0 0 61 0;0 0 0 0 0 0 0 0 29 30 31 32 0 0 0 0 0 0 0 0 0 0 0 62 63;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66]))\r\n\r\n%%\r\nassert(isequal(solve_maze([3 2 2 3 3 3 2 3 2 3 2 3 2 3 2 2 2 2 3 3 3 2 2 2 2 2 2 2 3 3 2 2 2 2 2 2 2 3 3 3 2 2 3 2 3;3 2 0 1 3 2 1 0 1 2 2 1 2 1 1 0 2 1 0 2 1 3 3 2 3 3 0 0 3 2 3 1 3 1 3 3 0 3 1 0 0 2 1 1 0;1 1 3 0 3 3 0 1 2 2 3 0 0 2 2 3 3 0 0 1 3 3 3 1 3 2 3 1 3 3 1 0 0 0 0 2 2 2 0 3 3 0 1 1 2;1 0 2 2 0 1 0 2 2 3 2 1 0 3 1 3 1 1 1 3 3 2 1 1 2 0 1 1 2 1 3 0 3 3 0 1 1 2 2 3 1 1 1 1 3;1 1 0 0 0 3 0 2 2 0 0 2 1 3 2 3 2 1 3 2 0 2 3 0 0 0 3 0 0 1 0 1 0 2 0 1 1 1 2 3 0 2 1 3 1;3 3 1 1 2 0 3 0 0 3 2 1 1 1 3 1 3 0 1 0 1 0 3 1 3 1 2 3 1 2 1 1 3 3 2 1 2 1 3 0 2 3 2 0 2;3 1 2 0 0 3 3 1 1 2 1 0 3 3 3 0 2 1 3 0 3 0 0 2 2 3 2 1 0 1 3 2 0 2 3 3 3 0 1 2 1 1 1 0 2;3 1 2 0 0 3 1 0 3 3 2 3 2 0 2 3 2 2 0 0 2 0 1 1 3 1 1 3 2 0 1 0 0 2 2 1 2 1 0 0 3 0 2 2 1;3 0 0 2 0 0 1 0 3 2 2 0 0 3 1 1 2 0 0 0 3 2 0 2 1 1 2 0 3 2 3 2 0 3 3 3 1 3 2 1 0 2 0 1 2;1 0 1 0 1 2 3 2 0 1 0 0 0 1 1 2 1 3 0 2 0 0 0 3 2 0 0 1 2 0 2 1 2 3 2 1 0 3 2 0 2 1 1 2 2;3 0 0 1 0 2 0 2 0 2 3 2 3 0 2 3 3 1 0 2 3 2 0 3 0 0 2 0 2 3 0 3 1 0 3 1 0 2 2 1 0 1 2 2 3;1 3 3 1 2 3 1 2 2 3 3 3 3 0 2 1 2 1 1 3 0 2 2 2 0 3 3 2 0 3 0 0 0 0 3 2 2 0 0 1 3 3 0 0 0;1 0 3 1 2 1 0 3 0 0 0 0 3 2 3 0 2 2 0 0 1 1 1 2 3 3 1 0 2 1 2 1 3 1 2 0 2 3 0 0 0 3 1 0 3;3 2 0 0 1 1 2 3 1 1 2 1 2 2 0 3 2 1 2 0 0 1 3 1 3 2 2 3 3 3 3 0 3 1 2 0 0 1 1 3 3 2 2 1 2;1 3 3 1 3 0 0 2 0 3 0 3 1 2 2 3 0 3 0 2 0 3 1 1 0 2 3 2 1 2 0 0 2 0 3 1 0 3 2 1 0 1 1 1 2;3 1 3 3 2 1 2 1 1 3 1 3 1 0 3 3 2 3 1 3 0 0 1 2 1 3 0 2 2 2 2 1 2 3 2 0 3 2 0 2 1 2 1 1 2;1 2 2 1 3 2 0 3 1 1 1 0 2 3 1 2 0 0 2 0 0 2 3 2 3 1 1 3 2 1 1 3 3 3 0 1 3 3 1 0 2 0 1 1 0;1 2 0 0 2 1 1 0 2 2 0 2 0 3 1 2 2 0 2 0 3 2 0 0 2 1 1 1 0 1 2 0 0 2 3 1 0 0 1 2 0 3 2 1 2;1 2 2 1 0 2 1 1 3 1 2 3 1 2 2 3 1 2 2 2 1 1 0 0 1 2 0 2 0 3 2 1 0 2 3 1 1 0 2 1 1 0 0 0 2;3 0 2 0 1 1 2 0 3 3 3 3 0 1 0 1 3 1 1 2 1 1 1 3 0 0 3 0 0 3 1 0 2 3 2 0 2 2 0 3 0 1 1 3 0;3 1 3 0 2 1 3 1 0 3 0 3 1 2 1 3 2 3 0 1 0 3 3 3 0 1 2 0 0 1 2 2 3 2 0 2 1 2 2 3 1 0 0 3 1;3 1 2 0 1 2 3 0 1 0 0 1 2 0 1 1 1 2 1 1 3 1 1 2 0 1 3 0 3 0 0 0 0 1 1 2 1 3 0 2 0 3 2 2 1;3 0 2 1 0 3 2 2 1 0 2 3 1 1 2 1 1 1 1 3 3 2 2 3 2 1 2 2 0 1 3 3 0 3 3 0 1 2 0 0 3 2 1 0 1;3 3 2 2 3 3 2 0 2 1 1 3 3 3 1 2 0 3 0 1 1 3 3 1 0 3 0 1 0 2 1 2 2 0 0 0 2 1 2 1 0 3 0 3 2;1 0 3 2 1 0 2 3 1 1 3 1 3 2 2 2 3 0 2 1 3 2 1 1 1 3 1 0 0 0 0 0 3 2 3 3 3 1 2 2 1 2 0 3 0;1 0 3 3 3 2 2 3 0 0 0 3 3 3 0 0 3 3 0 0 2 3 1 3 3 3 1 1 3 2 3 0 0 2 2 1 0 0 2 3 3 3 3 3 0;3 0 1 1 0 1 2 3 1 3 1 3 0 3 3 1 2 3 3 2 3 3 2 3 1 3 2 1 0 1 0 1 3 1 0 2 2 0 0 3 1 0 3 0 0;1 3 3 2 2 2 1 0 1 0 3 3 2 0 2 3 0 1 0 0 3 1 0 1 2 1 0 2 1 3 2 3 2 0 0 2 0 3 2 1 3 1 0 0 3;3 2 3 2 2 3 1 3 0 1 2 0 3 3 2 3 3 1 0 1 1 1 0 2 2 2 3 3 2 0 2 0 1 1 0 2 0 1 0 2 1 0 3 2 0;3 0 3 1 0 3 3 3 0 2 1 2 2 2 0 2 0 3 1 1 0 2 2 0 0 2 2 1 0 1 0 0 2 3 3 0 0 0 0 2 2 0 3 2 0;3 1 3 0 1 2 3 3 1 1 3 1 2 0 1 1 0 3 1 1 0 2 3 1 3 2 1 1 3 0 3 3 3 0 1 3 2 0 0 3 2 3 2 0 1;3 2 2 2 2 3 3 0 1 2 1 2 3 3 2 2 2 2 3 0 1 2 0 3 2 2 3 0 2 2 3 1 1 0 0 3 2 3 0 0 1 2 2 0 0;3 1 3 2 1 3 1 2 3 2 2 2 2 0 1 3 0 2 3 0 0 3 3 2 3 3 1 2 1 1 0 0 3 2 0 3 0 2 1 0 2 3 2 1 3;3 1 0 0 1 2 3 2 2 3 1 0 1 2 2 0 3 2 1 0 1 1 0 2 1 3 0 1 1 0 1 2 1 3 1 3 3 0 2 0 0 1 0 0 2;3 0 0 3 0 2 2 1 1 0 0 2 0 3 0 2 1 0 3 2 0 3 3 3 3 0 3 0 0 1 2 0 1 3 2 3 0 3 0 2 3 1 2 0 0;3 3 0 2 0 0 2 0 0 0 1 2 2 0 0 1 0 2 2 1 0 2 2 2 3 3 2 3 0 2 0 2 1 2 0 1 1 3 3 0 3 2 1 2 3;3 2 0 2 1 3 3 0 3 0 1 1 0 3 0 2 0 3 1 2 0 0 3 2 2 1 1 2 1 0 2 0 0 1 3 2 2 2 2 1 2 1 2 3 1;1 3 1 2 2 0 2 0 3 3 3 2 1 0 2 3 1 2 3 3 2 3 2 1 2 0 3 3 1 1 1 0 3 2 0 0 1 2 2 2 0 2 1 3 3;1 3 3 3 0 0 3 2 2 1 2 0 2 3 1 2 0 2 1 3 3 2 0 1 3 0 0 2 3 1 3 3 1 0 0 0 2 2 3 3 2 0 1 2 1;3 3 2 0 0 0 1 2 0 0 3 1 2 1 0 1 0 2 1 0 2 1 2 2 2 1 0 1 1 3 1 3 2 3 3 1 3 2 0 3 3 0 2 2 2;1 1 1 0 3 1 0 0 3 2 3 2 2 0 2 2 3 0 1 2 0 1 3 3 2 1 3 1 1 0 2 1 0 0 0 0 2 3 1 3 0 1 1 2 0;3 1 0 1 0 1 3 3 2 2 3 2 1 3 2 0 1 1 2 0 0 2 2 2 2 1 1 3 3 1 0 3 0 2 0 1 2 2 2 2 2 0 1 3 1;1 0 3 1 1 2 3 1 3 1 0 1 1 1 3 0 2 3 1 3 1 0 3 3 3 2 0 1 3 3 1 3 0 0 2 3 0 2 3 1 3 2 1 3 2;3 0 3 2 3 3 2 3 3 1 0 0 3 2 0 1 0 3 1 1 2 0 0 3 2 1 1 2 2 1 1 1 2 1 3 1 3 3 3 2 0 1 0 2 2;1 3 3 1 3 2 2 3 2 0 2 3 3 1 3 1 0 3 0 1 2 2 1 1 1 2 2 2 0 3 0 2 1 0 3 1 2 0 1 0 0 3 0 3 0;3 2 3 1 0 0 0 0 2 3 1 3 3 2 2 1 2 1 3 2 2 1 0 2 2 1 0 3 1 3 1 3 2 0 1 3 2 2 3 0 2 1 3 1 3;1 3 3 1 3 0 3 1 0 3 1 1 2 0 3 2 1 2 1 2 3 0 1 2 3 0 1 2 1 0 0 3 1 3 0 2 3 2 2 2 0 1 0 3 3;3 0 0 0 0 0 3 0 0 1 3 0 1 3 3 3 1 0 1 2 1 0 1 0 3 1 0 1 2 1 3 1 0 2 0 3 0 3 0 2 2 0 2 0 3;3 2 0 3 2 3 3 1 1 3 0 0 0 3 3 2 2 3 1 3 3 2 1 3 3 2 0 2 0 3 2 0 1 1 2 2 1 1 2 0 0 2 0 1 1;1 1 1 2 0 1 0 0 2 0 2 2 3 3 3 3 0 3 0 3 1 3 3 1 3 0 3 3 0 1 0 1 1 2 2 0 3 3 0 3 0 3 3 0 0]),[1 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 5 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 8 9 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 11 12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 12 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 13 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 48 49 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 17 18 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 44 45 46 0 0 51 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 20 21 22 0 0 0 0 0 0 0 0 0 0 37 38 39 40 41 42 0 0 0 0 0 52 53 54 55 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 23 24 25 26 0 0 31 32 33 34 35 36 0 0 0 0 0 0 0 0 0 0 0 0 0 56 57 58 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 27 28 29 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 58 59 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 60 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 62 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 63 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65 66 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 68 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 69 70 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 71 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 72 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 73 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 75 74 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 76 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 77 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 78 79 80 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 80 81 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 83 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 83 84 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 86 85 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 88 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 89 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90 91 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 92 93 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 94 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 96 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 98 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102 101 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 103 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 104 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 105 106 107 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 109 110]))","published":true,"deleted":false,"likes_count":14,"comments_count":0,"created_by":134,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":57,"test_suite_updated_at":"2012-02-08T22:51:09.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2012-02-08T03:01:26.000Z","updated_at":"2026-02-07T15:43:43.000Z","published_at":"2012-02-09T00:21:05.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eDescription\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe purpose of this problem is to give the shortest path through a maze. The maze will be provided in a codified matrix of size\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eM\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e x\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e where each element of the matrix represents a place in the grid and the value of each element is a binary-code that represents the presence of walls. That is:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[                                           +   +\\n    value = 0 -\u003e 00 -\u003e no walls         -\u003e \\n                 NW                        +   + \\n\\n                                           +   +\\n    value = 1 -\u003e 01 -\u003e wall to W        -\u003e |\\n                 NW                        +   +\\n\\n                                           +---+\\n    value = 2 -\u003e 10 -\u003e wall to N        -\u003e \\n                 NW                        +   +\\n\\n                                           +---+\\n    value = 3 -\u003e 11 -\u003e walls to N and W -\u003e |\\n                                           +   +]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNote: all outer boundaries are walls. My test cases provide for this already. You do\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003enot\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e need to account for this.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe path will always start at the NorthWest corner (subscript\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(1,1)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e) and end at the SouthEast corner (subscript\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(M,N)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e). The output should be a matrix of the same size as the input matrix that lists the steps you need to go through to traverse the maze with the remaining squares being 0. For example,\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    path = [  1   2   0   0   0   0 \\n              4   3   0   9  10   0\\n              5   6   7   8  11   0 \\n              0   0   0   0  12  13 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhich represents an output solution that is 13 units long. As you can see, the NorthWest corner will always be 1 and the SouthEast corner will always be the length of your path.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou are\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNOT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e guaranteed that there will be only one shortest path for the test cases. If there exist multiple shortest paths, you must represent them all. It can easily be shown that the superposition of two shortest paths will never lead to a multi-valued element in the output matrix.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput maze:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    maze = [  3  2  2  2  3\\n              1  3  2  2  3\\n              1  3  2  3  1\\n              1  1  0  2  0\\n              1  0  2  1  1  ];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGraphical Representation:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    +---+---+---+---+---+\\n    |               |   |\\n    +   +---+---+---+---+\\n    |   |           |   |\\n    +   +---+---+---+   +\\n    |   |       |   |   |\\n    +   +   +   +---+   +\\n    |   |               |\\n    +   +   +---+   +   +\\n    |           |   |   |\\n    +---+---+---+---+---+]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    soln = [  1   0   0   0   0\\n              2   0   0   0   0\\n              3   0   0   0   0\\n              4   7   8   9  10\\n              5   6   0   0  11 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGraphical Representation:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[    +---+---+---+---+---+\\n    | 1             |   |\\n    +   +---+---+---+---+\\n    | 2 |           |   |\\n    +   +---+---+---+   +\\n    | 3 |       |   |   |\\n    +   +   +   +---+   +\\n    | 4 | 7   8   9  10 |\\n    +   +   +---+   +   +\\n    | 5   6     |   |11 |\\n    +---+---+---+---+---+]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":1231,"title":"PACMAT Easy","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026d=1 PACMAT_Easy.m\u003e. (Right click, 'save link as'). Using patches (not sprites).\r\n\r\n\r\nAn example video of the first Player \u003chttps://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026d=1 PACMAT_Easy_Video\u003e  (MP4: Left click and Windows Media Player)\r\n\r\nAlfonso Nieto-Castanon's 298 \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026d=1 PACMAT Video\u003e\r\n\r\nAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots\r\n\r\n\r\n*Near Future:* Ghosts will move with various algorithms.\r\n\r\n*Far Future:* Asteroids and Space Invaders","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026amp;d=1\"\u003ePACMAT_Easy.m\u003c/a\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/p\u003e\u003cp\u003eAn example video of the first Player \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026amp;d=1\"\u003ePACMAT_Easy_Video\u003c/a\u003e  (MP4: Left click and Windows Media Player)\u003c/p\u003e\u003cp\u003eAlfonso Nieto-Castanon's 298 \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026amp;d=1\"\u003ePACMAT Video\u003c/a\u003e\u003c/p\u003e\u003cp\u003eAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts will move with various algorithms.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFar Future:\u003c/b\u003e Asteroids and Space Invaders\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n newdir=randi(4);\r\nend\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n lives=1; % Lives\r\n  movepac=0;\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003c5000 \u0026\u0026 ~isempty(find(map(:)==2))\r\n   while ~isempty(find(map(:)==2)) \u0026\u0026 movepac\u003c5000\r\n     movepac=movepac+1;\r\n\r\n if isempty(find(map==1,1)),break;end % \r\n [curdir]=pacmat(map);\r\n  if curdir==0,continue;end\r\n\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n     % Do nothing - Ran into a Wall\r\n    elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n      map(ptrpac)=0; % remove PAC from the board\r\n      lives=0;\r\n      break; % Lose\r\n    else % legal move\r\n      map(ptrpac)=0; % Eat Dot and clear PAC\r\n      ptrpac=ptrpac+mapdelta(curdir);\r\n      if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n      if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n      map(ptrpac)=2;\r\n    end\r\n  end % PAC Move while\r\n  if isempty(find(map==1,1)),break;end % \r\n   if lives==0,break;end\r\n   lives=lives-1;\r\n end % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0)\r\nassert(isempty(find(map==1)))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,movepac )) );","published":true,"deleted":false,"likes_count":4,"comments_count":4,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":19,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":33,"created_at":"2013-01-30T04:55:54.000Z","updated_at":"2026-02-07T15:46:18.000Z","published_at":"2013-01-30T05:48:03.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy is the simple case of clearing the board of Yellow Dots while not bumping into the non-moving ghosts.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy.m?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAn example video of the first Player\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/pac_s314_motMP4_v004.mp4?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Easy_Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4: Left click and Windows Media Player)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso Nieto-Castanon's 298\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Easy_ANC_298.mp4?attredirects=0\u0026amp;d=1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso employed a Local Optimum Monte-Carlo approach to find a best solution. Solution #8 is the very compact non-apriori PACMAT solver.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts will move with various algorithms.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFar Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Asteroids and Space Invaders\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1238,"title":"PACMAT - Ghosts Random; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m PACMAT_Ghosts_001.m\u003e. (Right click, 'save link as'). Using patches (not sprites).\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4 Alfonso PACMAT Random Ghost Video\u003e  (MP4: Left click and Windows Media Player)\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4 Alfonso's Enhanced Ghost Avoider\u003e (MP4)\r\n\r\n\r\nThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts will get brighter.\r\n\r\n*Future:* Player will be Team Ghosts versus PACMAT_BOT","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m\"\u003ePACMAT_Ghosts_001.m\u003c/a\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4\"\u003eAlfonso PACMAT Random Ghost Video\u003c/a\u003e  (MP4: Left click and Windows Media Player)\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4\"\u003eAlfonso's Enhanced Ghost Avoider\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts will get brighter.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n newdir=randi(4);\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=-1; %No tunnel ghosts\r\n  gmap(15,26)=-1;\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n %if curdir==0,continue;end % bug 020213\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0 % bug fix 020213\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir\u003e0 bug fix 020213\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n  gmap=map;\r\n  gmap(15,6)=-1; %No tunnel ghosts\r\n  gmap(15,26)=-1;\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % Random Ghost move  gmap avoids tunnel \r\n   gmov=intersect(find(gmap(gidx+mapdelta)\u003c10),find(gmap(gidx+mapdelta)\u003e-1)); \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    gmov=gmov(randi(length(gmov)));\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end\r\n  end\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2013-02-02T18:27:37.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-01T04:44:13.000Z","updated_at":"2026-02-07T15:48:13.000Z","published_at":"2013-02-01T06:15:30.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the randomly moving ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_001.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_001.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches (not sprites).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_SNC365_20_video.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso PACMAT Random Ghost Video\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4: Left click and Windows Media Player)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G001_video_ANC.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso's Enhanced Ghost Avoider\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts will get brighter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1241,"title":"PACMAT  - Ghosts maximize unique locations; 3 Lives","description":"The Classic PACMAN game brought to Cody.\r\n\r\nPACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\u003e\u003e\r\n\r\nTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m PACMAT_Ghosts_002.m\u003e. (Right click, 'save link as'). Using patches thus enable/figure  disable/video for best results.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4 Alfonso's Enhanced Ghost Avoider\u003e (MP4) Quite an impressive solution\r\n\r\n\r\nThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\r\n\r\n*Inputs:* Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\r\n\r\n*Output:* Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\r\n\r\n*Scoring:* Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\r\n\r\n\r\n*Near Future:* Ghosts with LOS Tracking.\r\n\r\n*Future:* Player will be Team Ghosts versus PACMAT_BOT","description_html":"\u003cp\u003eThe Classic PACMAN game brought to Cody.\u003c/p\u003e\u003cp\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT.  Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_300.jpg\"\u003e\u003cp\u003eTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m\"\u003ePACMAT_Ghosts_002.m\u003c/a\u003e. (Right click, 'save link as'). Using patches thus enable/figure  disable/video for best results.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4\"\u003eAlfonso's Enhanced Ghost Avoider\u003c/a\u003e (MP4) Quite an impressive solution\u003c/p\u003e\u003cp\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e Map   Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u003e2=Ghost\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction  Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Ghosts with LOS Tracking.\u003c/p\u003e\u003cp\u003e\u003cb\u003eFuture:\u003c/b\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/p\u003e","function_template":"function  [newdir]=pacmat(map)\r\n% 314 move solver if Ghosts do not move\r\n persistent ptr\r\n if isempty(ptr)\r\n  ptr=['bbbbbbbcccbbbbbcccdddddddddddddddddddddddddaaa'...\r\n      'bbbbbaaaaaaaaaaaaaaaaaaaaaaaaadddddcccccccbbbbddddaaabbbbbbbb'...\r\n      'cccbbbdddaaabbbaaaadddddbbbbbccccbbbbbbbbbbbbbbaaaaddddddddddd'...\r\n      'ccccbbbcccdddbbbaaabbbaaaccccccbbbbbaaccdddddccccccccccccccaabbbbbcccddccc'...\r\n      'dddaaaaaaddddddcccbbbcccdddcccdddaaadddaaaddbbbbbaaadddddddddddcccbbccc'];\r\n  ptr=(ptr-'a')+1;\r\n end\r\n  \r\n newdir=ptr(1);\r\n ptr(1)=[];\r\n\r\n% usage of newdir=randi(4) will barely move\r\nend","test_suite":"%%\r\nfeval(@assignin,'caller','score',2000);\r\n%%\r\nmax_moves=2000; % Fixed path expect to succeed by 600 moves\r\n\r\nmap=[...\r\n      repmat('a',1,28);\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'acaaaacaacaaaaaaaacaacaaaaca';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaaaaabaabaaaaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaabbaaabaacaaaaaa';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'bbbbbbcbbbabbbbbbabbbcbbbbbb';\r\n      'aaaaaacaabalbbbblabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabbbbbbbbbbaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'aaaaaacaabaaaaaaaabaacaaaaaa';\r\n      'accccccccccccaacccccccccccca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acaaaacaaaaacaacaaaaacaaaaca';\r\n      'acccaacccccccbdcccccccaaccca';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'aaacaacaacaaaaaaaacaacaacaaa';\r\n      'accccccaaccccaaccccaacccccca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acaaaaaaaaaacaacaaaaaaaaaaca';\r\n      'acccccccccccccccccccccccccca';\r\n      repmat('a',1,28);];\r\n  \r\n  map=map-'b';\r\n  [nr, nc]=size(map);\r\n\r\n  gmap=map; % Map used by ghosts to simplify PAC Capture\r\n  gmap(15,6)=Inf; %No tunnel ghosts\r\n  gmap(15,26)=Inf;\r\n  gmap(map==-1)=Inf; % walls to Inf\r\n  gmap(map\u003e2)=Inf; % Elim start points as viable moves, quicker box exit\r\n\r\n\r\n  mapdelta=[-1 nr 1 -nr]; % Valid as long as not on an edge\r\n  gmovxy=[0 -1;1 0;0 1;-1 0];\r\n\r\n  tunnel=find(map(:,1)==0); % tunnelptr\r\n  tunnel=[tunnel tunnel+nr*(nc-1)]; % Entrance/Exit Tunnel\r\n\r\n  [pmr, pmc]=find(map==2); % pi 24 row  pj 15 column of map\r\n   ptrpac=find(map==2);\r\n\r\n  ptrpac=find(map==2);\r\n  ptrpac_start=ptrpac;\r\n  ptrg_start=find(map\u003e2);\r\n  map(ptrg_start)=[10 20 30 40];% use deal?\r\n  [gstartx, gstarty]=find(map\u003e2);\r\n  \r\n  lives=3; % Lives\r\n  movepac=0;\r\n\r\nwhile lives \u0026\u0026 any(mod(map(:),10)==1) \u0026\u0026 movepac\u003cmax_moves\r\n movepac=movepac+1;\r\n\r\n [curdir]=pacmat(map);\r\n% if curdir==0,continue;end % Inf loop error\r\n [pmr, pmc]=find(map==2);\r\nif curdir\u003e0\r\n if map(ptrpac+mapdelta(curdir))==-1\r\n  % Do nothing - Ran into a Wall\r\n elseif map(ptrpac+mapdelta(curdir))\u003e2 % ran into ghost\r\n  map(ptrpac)=0; % remove PAC from the board\r\n  lives=lives-1;\r\n  if lives==0,break;end\r\n  % reset the board\r\n  [ptrgx, ptrgy]=find(map\u003e2);\r\n  ptrg=find(map\u003e2);\r\n  map(ptrg)=mod(map(ptrg),10);\r\n  map(ptrpac_start)=2;\r\n  map(ptrg_start)=[10 20 30 40];\r\n  ptrpac=find(map==2);\r\n  continue;\r\n else % legal move\r\n  map(ptrpac)=0; % Eat Dot and clear PAC\r\n  ptrpac=ptrpac+mapdelta(curdir);\r\n  if ptrpac==tunnel(1),ptrpac=tunnel(2)-nr;end\r\n  if ptrpac==tunnel(2),ptrpac=tunnel(1)+nr;end\r\n  map(ptrpac)=2;\r\n end\r\nend % curdir \u003e0\r\n\r\n% Ghosts\r\n for i=1:4\r\n\r\n   gmapT=gmap;\r\n   ptrg=find(map\u003e2); % Find all ghosts\r\n   gmapT(ptrg)=Inf; % Rule out moving onto a ghost\r\n\r\n\r\n  dot=false;\r\n  [gptrx, gptry]=find(map==10*i);\r\n  gidx=find(map==10*i);\r\n  if isempty(gidx)\r\n   [gptrx, gptry]=find(map==10*i+1); % ghost must be on a dot\r\n   gidx=find(map==10*i+1);\r\n   dot=true;\r\n  end\r\n\r\n% Find valid ghost moves using gmap\r\n% mapdelta=[-1 nr 1 -nr]; \r\n  gmov=find(map(gidx+mapdelta)==2); % adjacent to PACMAT\r\n  if ~isempty(gmov) % PAC adjacent\r\n   lives=lives-1;\r\n   if lives==0,break;end\r\n   % reset the board\r\n   [pmr, pmc]=find(map==2); % PACMAT erase coords\r\n   map(map==2)=0;\r\n      \r\n   [ptrgx, ptrgy]=find(map\u003e2);\r\n   ptrg=find(map\u003e2);\r\n   map(ptrg)=mod(map(ptrg),10);\r\n   map(ptrpac_start)=2;\r\n   map(ptrg_start)=[10 20 30 40];\r\n   ptrpac=find(map==2);     \r\n   break; % Ghost move loop\r\n      \r\n  else % gmap/gmapT avoids tunnel,other ghosts, Walls\r\n \r\n   gmap(gidx)=gmap(gidx)+1;\r\n   ghost_adj=gmapT(gidx+mapdelta);\r\n   if min(ghost_adj)\u003cInf\r\n    if rand\u003c0.5 % Push ghosts away from each other\r\n     gmov=find(ghost_adj==min(ghost_adj),1,'first');\r\n    else\r\n     gmov=find(ghost_adj==min(ghost_adj),1,'last');\r\n    end\r\n   else\r\n    gmov=[];\r\n   end\r\n \r\n   if ~isempty(gmov) % valid g move : ghost may not stand on ghost\r\n    map(gptrx,gptry)=mod(map(gptrx,gptry),10);\r\n    map(gidx+mapdelta(gmov))=map(gidx+mapdelta(gmov))+10*i;     \r\n   end % ~isempty(gmov) standard move - no capture\r\n\r\n  end % ~isempty(gmov) PACMAT adjacent\r\n  \r\n end % i ghost moves\r\nend % while alive\r\n\r\nfprintf('moves %i\\n',movepac)\r\n\r\nassert(lives\u003e0,sprintf('Three Captures\\n'))\r\nassert(~isempty(any(mod(map(:),10)==1)),sprintf('Moves\\n',movepac)) % Test Move Timeout\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 2000,300-100*lives+movepac )) );\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":"2013-02-02T05:09:50.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-02T00:36:11.000Z","updated_at":"2026-02-07T15:49:54.000Z","published_at":"2013-02-02T01:21:05.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe Classic PACMAN game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT Ghosts Random requires clearing the board of Yellow Dots while not bumping into the wandering ghosts in 3 lives. Adjacent Ghosts will capture PACMAT. Ghosts do not use the tunnel. On Ghost capture everyone gets reset.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"image\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"height\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"width\\\" w:val=\\\"-1\\\"/\u003e\u003cw:attr w:name=\\\"relationshipId\\\" w:val=\\\"rId1\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PACMAT_Ghosts_002.m file that creates a video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_Ghosts_002.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePACMAT_Ghosts_002.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). Using patches thus enable/figure disable/video for best results.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PACMAT_G002_video_ANC.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eAlfonso's Enhanced Ghost Avoider\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4) Quite an impressive solution\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe reference solution uses Alfonso's Local Optimum Algorithm with a Catch.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Map Definitions: -1=Wall, 0=Empty, 1=Dot, 2=PACMAT, \u0026gt;2=Ghost\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction Definitions: 1-Up, 2-Right, 3-Down, 4-Left, 0-No move\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Total # of Moves to Clear the Yellow Dots +(LivesRemaining-3)*100\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Ghosts with LOS Tracking.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eFuture:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player will be Team Ghosts versus PACMAT_BOT\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,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\"}]}"},{"id":1257,"title":"PONG 001: Player  vs Wall, 4 Lives, Interactive download","description":"Variation of the Original Classic PONG game brought to Cody.\r\n\r\nAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\r\n\r\nPaddle center is provided and paddle covers +/- 50 units.\r\nThe field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\r\n\r\nTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at \u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m PONG_Interactive_001a.m\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\r\n\r\n\r\n\u003chttps://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4 PONG Interactive 63 Returns\u003e (MP4)\r\n\r\n\r\n\r\n*Inputs:* (paddle,ball)  \r\n \r\n   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point\r\n\r\n*Output:* Direction\r\n\r\n   1 Up, -1 is Down, 0-No move\r\n   Paddle moves 50*direction, half paddle step. abs(direction)\u003c=1 is allowed\r\n\r\n*Pass Criteria:* 10 hits, a score of 450 or better\r\n\r\n*Scoring:* 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u003c 100 hits)\r\n\r\n*Game Theory:* Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\r\n\r\n*Near Future:* Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position","description_html":"\u003cp\u003eVariation of the Original Classic PONG game brought to Cody.\u003c/p\u003e\u003cp\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\u003c/p\u003e\u003cp\u003ePaddle center is provided and paddle covers +/- 50 units.\r\nThe field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/p\u003e\u003cp\u003eTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at \u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m\"\u003ePONG_Interactive_001a.m\u003c/a\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/p\u003e\u003cp\u003e\u003ca href=\"https://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4\"\u003ePONG Interactive 63 Returns\u003c/a\u003e (MP4)\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (paddle,ball)\u003c/p\u003e\u003cpre\u003e   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\r\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point\u003c/pre\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Direction\u003c/p\u003e\u003cpre\u003e   1 Up, -1 is Down, 0-No move\r\n   Paddle moves 50*direction, half paddle step. abs(direction)\u0026lt;=1 is allowed\u003c/pre\u003e\u003cp\u003e\u003cb\u003ePass Criteria:\u003c/b\u003e 10 hits, a score of 450 or better\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e 100 - 5 * Hits + 100 * Lives,  (500 - 5 * hits  for \u0026lt; 100 hits)\u003c/p\u003e\u003cp\u003e\u003cb\u003eGame Theory:\u003c/b\u003e Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\u003c/p\u003e\u003cp\u003e\u003cb\u003eNear Future:\u003c/b\u003e Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position\u003c/p\u003e","function_template":"function pdir = PONG_001_solver(paddle,ball)\r\n %  paddle=500; % position y % min max paddle [50 950]\r\n %  ball=[500 500 40 60]; % x y vx vy  Treated as a Point\r\n %\r\n % Output Paddle movement : pdir range [-1 1]\r\n %\r\n % Paddle Size is +/- 50 from paddle value\r\n % Predict ball location and move to within +/- 50\r\n % or Load PONG_001_solver.m from Interactive Play with file create\r\n \r\npdir = randi([-1 1]);\r\n \r\n \r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',500);\r\n\r\n pwidth=50; % Total size +/- 50 for 101 Paddle\r\n bwidth=10; % Radius of ball\r\n\r\n vup=10; % Sub-sampling ball movements for Interactive\r\n spfx=1.10; % Speed increase factor\r\n spfy=1.05; % to Avoid fixed Paddle solution\r\n negVmax=-200;\r\n posVmax=210;\r\n mov_step=50; % Paddle Quantized Movement  (1/2 Paddle)\r\n maxLives=4;\r\n maxHits=100;\r\n\r\n% Initial Start\r\n paddle=500; % position y % min max paddle [50 950]\r\n ball=[500 500 40 60]; % x y vx vy  Treated as a Point\r\n\r\nlives=0; % Lives\r\nhits=0;\r\nentry=0;\r\n\r\nwhile lives\u003cmaxLives \u0026\u0026 hits\u003cmaxHits\r\n\r\n [curdir]=PONG_001_solver(paddle,ball); % FUNCTION CALL\r\n\r\n if abs(curdir)\u003e1,curdir=0;end % Max 1 / -1 allowed\r\n curmov=mov_step*curdir;\r\n\r\n if entry==0\r\n  curdirvec=curdir;\r\n  entry=1;\r\n else\r\n  curdirvec=[curdirvec curdir]; % Saving moves for file create\r\n end\r\n\r\n% Paddle Move\r\n paddle=max(pwidth,min(1000-pwidth,paddle+curmov)); % [50 : 950] limits\r\n\r\n% Ball Move : Hopefully I got the Mirror solutions right\r\n\r\n  for j=1:vup\r\n    % ball=[500 500 1 1]; % x y vx vy  Treated as a Point\r\n\r\n    if ball(1)+ball(3)/vup\u003c=0 % Check if Point is Over\r\n\r\n    % Find x=0 crossing and check if paddle is within\r\n    % [paddle-pwidth-bwidth,paddle+pwidth+bwidth] pwidth=50; \r\n    % set speed scalar\r\n    \r\n      xc=ball(2)-ball(1)*ball(4)/ball(3);\r\n      if xc\u003e=1000\r\n       xc=1000-(xc-1000);\r\n      else\r\n       xc=abs(xc);\r\n      end\r\n      \r\n      paddlemax= paddle+pwidth+bwidth;\r\n      paddlemin= paddle-pwidth-bwidth;\r\n      \r\n      if xc\u003epaddlemax || xc\u003cpaddlemin % Swing and a Miss\r\n       lives=lives+1;\r\n       fprintf('Oops %i\\n',lives);\r\n       \r\n       if lives\u003e=maxLives,break;end\r\n       % draw ball\r\n       %paddle=500; % position y % min max paddle [50 950]\r\n\r\n       % Reset Ball Keep deterministic but different\r\n       ball=[500-100*lives 500 40+11*lives 35-3*lives];\r\n\r\n       break;\r\n      end\r\n      \r\n      \r\n      % Ball returned\r\n      hits=hits+1;\r\n      ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n      \r\n      ball(1)=-ball(1);\r\n      ball(3)=-spfx*ball(3);\r\n      \r\n      if ball(2)\u003c0\r\n       ball(2)=-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      elseif ball(2)\u003e1000\r\n       ball(2)=2000-ball(2);\r\n       ball(4)=-spfy*ball(4);\r\n      else\r\n       ball(4)=spfy*ball(4);\r\n      end\r\n      \r\n      ball(3)=max(negVmax,min(posVmax,ball(3)));\r\n      ball(4)=max(negVmax,min(posVmax,ball(4)));\r\n      \r\n    else % Wall bounces\r\n     ball(1:2)=ball(1:2)+ball(3:4)/vup;\r\n     \r\n     if ball(1)\u003e=1000 % To the right\r\n      ball(1)=1000-(ball(1)-1000);\r\n      ball(3)=-ball(3);\r\n      if ball(2)\u003e=1000 % TR\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BR\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     else % Middle\r\n      if ball(2)\u003e=1000 % TM\r\n       ball(2)=1000-(ball(2)-1000);\r\n       ball(4)=-ball(4);\r\n      elseif ball(2)\u003c=0 % BM\r\n       ball(2)=-ball(2); % abs\r\n       ball(4)=-ball(4);\r\n      end\r\n     end\r\n    \r\n     \r\n    end % Ball Pass / New Position\r\n\r\n  end % j vup\r\n\r\n\r\nend % while Alive and Hits \u003c Total Success\r\n\r\n%fprintf('%i ',curdirvec);fprintf('\\n'); % Moves\r\nfprintf('Hits %i\\n',hits)\r\nfprintf('Lives %i\\n',lives)\r\nscore= max(0,maxHits-5*hits+100*lives); % \r\n \r\nfprintf('Score %i\\n',score)\r\n% Passing Score is 10 hits to Score 450 or Less\r\n\r\nassert(score\u003c=450,sprintf('Score %i\\n',score))\r\n\r\n\r\nfeval( @assignin,'caller','score',floor(min( 500,score )) );","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":33,"created_at":"2013-02-10T05:51:19.000Z","updated_at":"2026-02-07T15:54:36.000Z","published_at":"2013-02-10T06:57:18.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVariation of the Original Classic PONG game brought to Cody.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAttempt to keep the ball alive against a Wall. The ball speeds up on every hit. When it is missed it restarts at a new location. The start locations and sequences are purely deterministic. Movement of the paddle are max up/down steps of -1 to 1 (effective delta 50) or no move. Partial paddle moves allowed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePaddle center is provided and paddle covers +/- 50 units. The field is square at 1000 by 1000 with 3 walls and the lower left corner being (0,0)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo aid in development of your routine, a PONG_Interactive_001a.m file that creates a solver script and video has been posted at\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_Interactive_001a.m\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG_Interactive_001a.m\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. (Right click, 'save link as'). The routine creates a PONG_001_solver.m script from the interactive play. The script demonstrates Interactivity, figure/KeyPressFcn, listdlg, and VideoWriter.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://sites.google.com/site/razapor/matlab_cody/PONG_001_video_63_185.mp4\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ePONG Interactive 63 Returns\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e (MP4)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInputs:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (paddle,ball)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   paddle = 500 ; Paddle Center on the Y-axis, Paddle is +/- 50 from center\\n   ball=[500 500 40 60]; % x y vx vy  Posiiton and Velocity, Treated as a Point]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Direction\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[   1 Up, -1 is Down, 0-No move\\n   Paddle moves 50*direction, half paddle step. abs(direction)\u003c=1 is allowed]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ePass Criteria:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 10 hits, a score of 450 or better\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 100 - 5 * Hits + 100 * Lives, (500 - 5 * hits for \u0026lt; 100 hits)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eGame Theory:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Position Paddle to minimize travel to next location. Vx=1.1*Vx and Vy=1.05*Vy after every return.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eNear Future:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Paddle vs Paddle (Mirror). Followed by Angle varation based on Paddle/Ball Position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":2265,"title":"2048 Next Move","description":"Given a board in the game 2048 (see the game here: \u003chttp://gabrielecirulli.github.io/2048/ 2048\u003e) and a direction ('up','down','left', or 'right'), move the game forward one turn.\r\n\r\nMove and merge blocks as required by the game's rules, but for simplicity *do not* insert a new 2.\r\n\r\nExample 1\r\n\r\n board = [ ...\r\n    0     0     0     2\r\n    0     0     4     4\r\n    0     0     0    16\r\n    0     0     0    16]\r\n dir = 'up'\r\n newBoard = [ ...\r\n    0     0     4     2\r\n    0     0     0     4\r\n    0     0     0    32\r\n    0     0     0     0 ]\r\n\r\nExample 2\r\n\r\n board = [ ...\r\n    0     2   128     4\r\n    0    16     4    32\r\n    0     8     0     0\r\n    0     0     2     0 ]\r\n dir = 'right'\r\n newBoard = [ ...\r\n    0     2   128     4\r\n    0    16     4    32\r\n    0     0     0     8\r\n    0     0     0     2 ]\r\n\r\nExample 3. Resolving Ambiguity\r\n\r\nIf we think of the directions as defining the pull of gravity, then we resolve ambiguous cases by first merging the two \"lowest\" blocks. See below.\r\n\r\n board = [ ...\r\n    0     4     4     4\r\n    4     4     4     0\r\n    2     2     2     2\r\n    0     0     0     0 ]\r\n dir = 'left'\r\n newBoard = [ ...\r\n    8     4     0     0\r\n    8     4     0     0\r\n    4     4     0     0\r\n    0     0     0     0 ]\r\n\r\nInspired by a suggestion from \u003chttp://www.mathworks.com/matlabcentral/cody/players/17831-nicholas-howe Nick Howe\u003e.","description_html":"\u003cp\u003eGiven a board in the game 2048 (see the game here: \u003ca href = \"http://gabrielecirulli.github.io/2048/\"\u003e2048\u003c/a\u003e) and a direction ('up','down','left', or 'right'), move the game forward one turn.\u003c/p\u003e\u003cp\u003eMove and merge blocks as required by the game's rules, but for simplicity \u003cb\u003edo not\u003c/b\u003e insert a new 2.\u003c/p\u003e\u003cp\u003eExample 1\u003c/p\u003e\u003cpre\u003e board = [ ...\r\n    0     0     0     2\r\n    0     0     4     4\r\n    0     0     0    16\r\n    0     0     0    16]\r\n dir = 'up'\r\n newBoard = [ ...\r\n    0     0     4     2\r\n    0     0     0     4\r\n    0     0     0    32\r\n    0     0     0     0 ]\u003c/pre\u003e\u003cp\u003eExample 2\u003c/p\u003e\u003cpre\u003e board = [ ...\r\n    0     2   128     4\r\n    0    16     4    32\r\n    0     8     0     0\r\n    0     0     2     0 ]\r\n dir = 'right'\r\n newBoard = [ ...\r\n    0     2   128     4\r\n    0    16     4    32\r\n    0     0     0     8\r\n    0     0     0     2 ]\u003c/pre\u003e\u003cp\u003eExample 3. Resolving Ambiguity\u003c/p\u003e\u003cp\u003eIf we think of the directions as defining the pull of gravity, then we resolve ambiguous cases by first merging the two \"lowest\" blocks. See below.\u003c/p\u003e\u003cpre\u003e board = [ ...\r\n    0     4     4     4\r\n    4     4     4     0\r\n    2     2     2     2\r\n    0     0     0     0 ]\r\n dir = 'left'\r\n newBoard = [ ...\r\n    8     4     0     0\r\n    8     4     0     0\r\n    4     4     0     0\r\n    0     0     0     0 ]\u003c/pre\u003e\u003cp\u003eInspired by a suggestion from \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/players/17831-nicholas-howe\"\u003eNick Howe\u003c/a\u003e.\u003c/p\u003e","function_template":"function newBoard = nextMove(board,dir)\r\n  newBoard = zeros(4);\r\nend","test_suite":"%%\r\nboard = [ ...\r\n    0     0     0     2\r\n    0     0     4     4\r\n    0     0     0    16\r\n    0     0     0    16];\r\ndir = 'up';\r\nnewBoard = [ ...\r\n    0     0     4     2\r\n    0     0     0     4\r\n    0     0     0    32\r\n    0     0     0     0 ];\r\nassert(isequal(nextMove(board,dir),newBoard))\r\n\r\n%%\r\nboard = [ ...\r\n    0     2   128     4\r\n    0    16     4    32\r\n    0     8     0     0\r\n    0     0     2     0 ];\r\ndir = 'right';\r\nnewBoard = [ ...\r\n    0     2   128     4\r\n    0    16     4    32\r\n    0     0     0     8\r\n    0     0     0     2 ];\r\nassert(isequal(nextMove(board,dir),newBoard))\r\n\r\n%%\r\nboard = [ ...\r\n    0     8     0     4\r\n    2    64    16     2\r\n    2     8     8    16\r\n    4     2     2     4 ];\r\ndir = 'left';\r\nnewBoard = [ ...\r\n    8     4     0     0\r\n    2    64    16     2\r\n    2    16    16     0\r\n    4     4     4     0 ];\r\nassert(isequal(nextMove(board,dir),newBoard))\r\n\r\n%%\r\n board = [ ...\r\n    0     4     4     4\r\n    4     4     4     0\r\n    2     2     2     2\r\n    0     0     0     0 ]\r\n dir = 'left'\r\n newBoard = [ ...\r\n    8     4     0     0\r\n    8     4     0     0\r\n    4     4     0     0\r\n    0     0     0     0 ]\r\nassert(isequal(nextMove(board,dir),newBoard))\r\n\r\n","published":true,"deleted":false,"likes_count":10,"comments_count":12,"created_by":7,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":93,"test_suite_updated_at":"2016-03-03T15:27:04.000Z","rescore_all_solutions":false,"group_id":33,"created_at":"2014-03-31T20:55:49.000Z","updated_at":"2026-02-07T15:56:54.000Z","published_at":"2014-03-31T20:55:59.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003eGiven a board in the game 2048 (see the game here:\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://gabrielecirulli.github.io/2048/\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e2048\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e) and a direction ('up','down','left', or 'right'), move the game forward one turn.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eMove and merge blocks as required by the game's rules, but for simplicity\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003edo not\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e insert a new 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:t\u003eExample 1\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[ board = [ ...\\n    0     0     0     2\\n    0     0     4     4\\n    0     0     0    16\\n    0     0     0    16]\\n dir = 'up'\\n newBoard = [ ...\\n    0     0     4     2\\n    0     0     0     4\\n    0     0     0    32\\n    0     0     0     0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample 2\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[ board = [ ...\\n    0     2   128     4\\n    0    16     4    32\\n    0     8     0     0\\n    0     0     2     0 ]\\n dir = 'right'\\n newBoard = [ ...\\n    0     2   128     4\\n    0    16     4    32\\n    0     0     0     8\\n    0     0     0     2 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample 3. Resolving Ambiguity\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eIf we think of the directions as defining the pull of gravity, then we resolve ambiguous cases by first merging the two \\\"lowest\\\" blocks. See below.\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[ board = [ ...\\n    0     4     4     4\\n    4     4     4     0\\n    2     2     2     2\\n    0     0     0     0 ]\\n dir = 'left'\\n newBoard = [ ...\\n    8     4     0     0\\n    8     4     0     0\\n    4     4     0     0\\n    0     0     0     0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInspired by a suggestion from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/players/17831-nicholas-howe\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eNick Howe\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\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\"}]}"}],"no_progress_badge":{"id":53,"name":"Unknown","symbol":"unknown","description":"Partially completed groups","description_html":null,"image_location":"/images/responsive/supporting/matlabcentral/cody/badges/problem_groups_unknown_2.png","bonus":null,"players_count":0,"active":false,"created_by":null,"updated_by":null,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"created_at":"2018-01-10T23:20:29.000Z","updated_at":"2018-01-10T23:20:29.000Z","community_badge_id":null,"award_multiples":false}}