{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":44970,"title":"SAY 'OHYEAH'","description":"Regardless of input, output the string 'OHYEAH'.","description_html":"\u003cp\u003eRegardless of input, output the string 'OHYEAH'.\u003c/p\u003e","function_template":"function disp = wiferight(in)\r\n  disp='OHno';\r\nend","test_suite":"%%\r\nx = 'But I''m actually right this time';\r\ny_correct = 'OHYEAH';\r\nassert(isequal(wiferight(x),y_correct))\t\r\n%%\r\nx = 'But you just said that 2+2=3';\r\ny_correct = 'OHYEAH';\r\nassert(isequal(wiferight(x),y_correct))\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":346112,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":47,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2019-09-27T14:27:15.000Z","updated_at":"2026-02-16T16:45:48.000Z","published_at":"2019-09-27T14:27:15.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\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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\u003eRegardless of input, output the string 'OHYEAH'.\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":2935,"title":"y equals x divided by 2","description":"function y = x/2","description_html":"\u003cp\u003efunction y = x/2\u003c/p\u003e","function_template":"function y = your_fcn_name(x)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = 1;\r\ny_correct = .5;\r\n\r\nassert(isequal(your_fcn_name(x),y_correct))\r\n","published":true,"deleted":false,"likes_count":8,"comments_count":0,"created_by":34012,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":542,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-02-03T22:34:15.000Z","updated_at":"2026-02-18T11:17:29.000Z","published_at":"2015-02-03T22:34:17.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\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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\u003efunction y = x/2\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":701,"title":"Play Tic-Tac-Toe: Easy Bots","description":"Interactive Tic-Tac-Toe game versus the test suite algorithms.\r\n\r\nThe contest will be 50 games of Computer first and 50 games of Player first.\r\n\r\nThe tic-tac-bots are not strong and are named Up, Down, and Random.\r\n\r\nInitial board is zeros(3).\r\nComputer moves are 1s and Player moves are 2s.\r\n\r\nPlayer output is an integer 1:9 to identify array position\r\n\r\n1 4 7\r\n\r\n2 5 8\r\n\r\n3 6 9\r\n\r\nExamples:\r\n\r\nInput: [1 0 0;0 0 0;0 0 0]  % Computer first case\r\n\r\nOutput: 5\r\n\r\nYields : [1 0 0; 0 2 0;0 0 0] with computer then picking position 2.\r\n\r\nSecond Input: [1 0 0;1 2 0;0 0 0] with computer's second move shown\r\n\r\n.\r\n\r\nPassing Score is 66 Wins out of 100 games.\r\n\r\nIt may be possible to score 100 Wins against the tic-tac-bots.\r\n\r\nYour Total Wins will be displayed.\r\n\r\nA follow-on problem will be 100 Tic-Tac-Toe Games: Never Lose Challenge\r\n\r\n","description_html":"\u003cp\u003eInteractive Tic-Tac-Toe game versus the test suite algorithms.\u003c/p\u003e\u003cp\u003eThe contest will be 50 games of Computer first and 50 games of Player first.\u003c/p\u003e\u003cp\u003eThe tic-tac-bots are not strong and are named Up, Down, and Random.\u003c/p\u003e\u003cp\u003eInitial board is zeros(3).\r\nComputer moves are 1s and Player moves are 2s.\u003c/p\u003e\u003cp\u003ePlayer output is an integer 1:9 to identify array position\u003c/p\u003e\u003cp\u003e1 4 7\u003c/p\u003e\u003cp\u003e2 5 8\u003c/p\u003e\u003cp\u003e3 6 9\u003c/p\u003e\u003cp\u003eExamples:\u003c/p\u003e\u003cp\u003eInput: [1 0 0;0 0 0;0 0 0]  % Computer first case\u003c/p\u003e\u003cp\u003eOutput: 5\u003c/p\u003e\u003cp\u003eYields : [1 0 0; 0 2 0;0 0 0] with computer then picking position 2.\u003c/p\u003e\u003cp\u003eSecond Input: [1 0 0;1 2 0;0 0 0] with computer's second move shown\u003c/p\u003e\u003cp\u003e.\u003c/p\u003e\u003cp\u003ePassing Score is 66 Wins out of 100 games.\u003c/p\u003e\u003cp\u003eIt may be possible to score 100 Wins against the tic-tac-bots.\u003c/p\u003e\u003cp\u003eYour Total Wins will be displayed.\u003c/p\u003e\u003cp\u003eA follow-on problem will be 100 Tic-Tac-Toe Games: Never Lose Challenge\u003c/p\u003e","function_template":"function p = tic_tac_toe(x)\r\n  p = 1;\r\nend","test_suite":"%%\r\n%Tic-Tac-Toe \r\n%Demonstration of Multi-Call with adaptive response\r\n\r\nwins=0;\r\nPass=0;\r\nfor i=1:50 % Computer First;  51-100 will be Player First\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n  if i\u003c16 % Up bot\r\n   p=find(x==0,1);\r\n  elseif i\u003c31 % Down bot\r\n   p=find(x==0,1,'last');\r\n  else % 31 thru 50 % random bot\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n  end\r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win,break;end % Computer Wins on its move\r\n  \r\n  % Draw check Post computer move (9th move)\r\n  if sum(x(:))\u003e=13,break;end\r\n  \r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  p=p(1);\r\n  if x(p)~=0,break;end % Invalid move - Game over\r\n  x(p)=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move\r\n  \r\n  \r\n end % gameover while 1:50\r\nend % Games 1:50\r\n\r\n% Output wins against Computer first\r\nwins\r\n\r\nfor i=51:100 % Player First;  51-100 Player First\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  p=p(1);\r\n  if x(p)~=0,break;end % Invalid move - Game over\r\n  x(p)=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move   \r\n  \r\n  % Draw check Post computer move (9th move)\r\n  if sum(x(:))\u003e=13,break;end\r\n     \r\n  if i\u003c66 % Up bot\r\n   p=find(x==0,1);\r\n  elseif i\u003c81 % Down bot\r\n   p=find(x==0,1,'last');\r\n  else % 31 thru 50 % random bot\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n  end\r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win,break;end % Computer Wins on its move\r\n   \r\n end % gameover while 51:100\r\nend % Games 51:100\r\n\r\nwins\r\n\r\nif wins\u003e65,Pass=1;end\r\nassert(isequal(Pass,1))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2012-06-03T19:49:30.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-19T15:10:18.000Z","updated_at":"2026-01-03T17:04:22.000Z","published_at":"2012-05-19T16:47:46.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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\u003eInteractive Tic-Tac-Toe game versus the test suite 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest will be 50 games of Computer first and 50 games of Player first.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe tic-tac-bots are not strong and are named Up, Down, and Random.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer output is an integer 1:9 to identify array position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1 4 7\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2 5 8\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3 6 9\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: [1 0 0;0 0 0;0 0 0] % Computer first case\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput: 5\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYields : [1 0 0; 0 2 0;0 0 0] with computer then picking position 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSecond Input: [1 0 0;1 2 0;0 0 0] with computer's second move shown\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePassing Score is 66 Wins out of 100 games.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt may be possible to score 100 Wins against the tic-tac-bots.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour Total Wins will be displayed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA follow-on problem will be 100 Tic-Tac-Toe Games: Never Lose Challenge\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":52323,"title":"Guess the number I'm thinking of (Part 2)","description":"Have you tried the original \"Guess the number I'm thinking of\" (Problem 44630)?  This problem is just like that, except that the range of possible numbers can change, and pre-calculated answers are explicitly disallowed.  Computing all possible permutations on the fly is not disallowed per se, but it is discouraged due to the high computational load involved.  \r\nIn this game you are competing against two other people to guess the number that I'm thinking of.\r\nI randomly choose an integer between one and N (inclusive).  N is an integer between 4 and 1000 (inclusive) that will be specified in each test as upperLimit.  I don't provide any other clues about the number that is to be guessed.\r\nYour first opponent tries to guess the number.  They guess randomly.\r\nYour second opponent tries to guess the number.  They also guess randomly.\r\nYou try to guess the number.  But you guess strategically.\r\nThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number.  This represents a \"win\".\r\nIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\".  (It is a loss for the remaining contestant.)  A draw is worth half as much as a win.\r\nEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector guessesOfOpponents).  Moreover, each guess must be unique.\r\nIf everyone guessed randomly, each person should have an equal chance of winning.\r\nIt might seem that you're at a disadvantage, having the last opportunity to guess.  But actually you have the advantage of extra knowledge.\r\nBy guessing strategically, you should be able to achieve a \"success rate\" of substantially better than 33.3%.  The success rate is defined as follows.  \r\nsuccess rate = (wins + draws/2) / games\r\nThe precise value of the expected success rate (when guessing with the optimal strategy) depends upon the value of N:  when N = 4 you should be able to achieve a success rate of 17/48 ≈ 35.4% on average, increasing monotonically to above 50% for N ≥ 24, eventually approaching an asymptote of 19/36 ≈ 52.8%.  (See the Test Suite for details of the thresholds applied.) \r\n\r\nRELATED PROBLEM:  \r\nProblem 44630. Guess the number I'm thinking of (Part 1)","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 691px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 345.5px; transform-origin: 407px 345.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eHave you tried the original \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://au.mathworks.com/matlabcentral/cody/problems/44630-guess-the-number-i-m-thinking-of\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"font-style: italic; \"\u003e\"Guess the number I'm thinking of\" (Problem 44630)\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e?  This problem is just like that, except that the range of possible numbers can change, and pre-calculated answers are explicitly disallowed.  Computing all possible permutations on the fly is not disallowed per se, but it is discouraged due to the high computational load involved.  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003col style=\"block-size: 181px; font-family: Helvetica, Arial, sans-serif; list-style-type: decimal; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 90.5px; transform-origin: 391px 90.5px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 41px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.5px; text-align: left; transform-origin: 363px 20.5px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eI randomly choose an\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003einteger\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e between\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eone\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e (inclusive).  \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e is an integer between 4 and 1000 (inclusive) that will be specified in each test as \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eupperLimit\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.  I don't provide any other clues about the number that is to be guessed.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour first opponent tries to guess the number.  They guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour second opponent tries to guess the number.  They also guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYou try to guess the number.  But you guess\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estrategically\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number.  This represents a \"win\".\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\".  (It is a loss for the remaining contestant.)  A draw is worth half as much as a win.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eguessesOfOpponents\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e).  Moreover, each guess must be unique.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess.  But actually you have the advantage of extra knowledge.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eBy guessing strategically, you should be able to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eachieve a \"success rate\" of substantially better than 33.3%\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.  The success rate is defined as follows.  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003esuccess rate = (wins + draws/2) / games\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe precise value of the expected success rate (when guessing with the optimal strategy) depends upon the value of \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e:  when \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e = 4 you should be able to achieve a success rate of 17/48 ≈ 35.4% on average, increasing monotonically to above 50% for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e ≥ 24, eventually approaching an asymptote of 19/36 ≈ 52.8%.  (See the Test Suite for details of the thresholds applied.) \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eRELATED PROBLEM:  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 10px; transform-origin: 391px 10px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/44630\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 44630. Guess the number I'm thinking of (Part 1)\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = myGuess(upperLimit, guessesOfOpponents)\r\n    y = 42;\r\nend","test_suite":"%% Anti-hacking test.\r\nassessFunctionAbsence({'rng', 'RandStream'}, 'FileName','myGuess.m')\r\n\r\n%% Anti-precalculation test.\r\n% Do not try to get evade the test.  Just follow the clear rule:  DO NOT PRECALCULATE.\r\nassessFunctionAbsence({'sub2ind', 'str2num'}, 'FileName','myGuess.m')\r\n\r\n% And while we're at it, I dislike the practice of using \"ans\" in a script.  \r\nassessFunctionAbsence({'ans'}, 'FileName','myGuess.m')\r\n\r\n% And you don't really need regexp or regexpi eithr.\r\nassessFunctionAbsence({'regexp', 'regexpi'}, 'FileName','myGuess.m')\r\n\r\n%% Ensure unique guesses of integers, which are in-range.\r\nfor j = 1 : 1000\r\n    upperLim = randi([4, 1000]);\r\n    numberToBeGuessed = randi(upperLim);\r\n    gOO = randperm(upperLim, 2);\r\n    mG = myGuess(upperLim, gOO);\r\n    assert( mG \u003e= 1  \u0026  mG \u003c= upperLim , 'Out of requested range.' )\r\n    u = unique( floor([gOO mG]) );\r\n    assert( length(u) == 3 , 'Your guess must not have been already chosen.' )\r\nend;\r\n\r\n%% Check the success rate several times for various values of N.\r\nmaxIts = 50000;    % maxIts: 20000 = Too small; 30000 = Not quite big enough; 35000 = Just big enough (usually!); 50000 = Big enough (usually!); 100000 = Big enough, plus safety margin \u0026 efficiency incentive (but waste of resources)\r\ntic\r\nfor j = 1 : 12\r\n%for j = 5 : 20 : 1000\r\n    %upperLim = 3 + j;\r\n    if j \u003c= 4,\r\n        % Focus on smaller N.\r\n        upperLim = randi([4, 10]);\r\n    elseif j \u003c= 8,\r\n        % Focus on intermediate N.\r\n        upperLim = randi([11, 40]);\r\n    else\r\n        % Focus on larger N.\r\n        upperLim = randi([41, 1000]);\r\n    end;\r\n    WDL = [0 0 0];\r\n    for itn = 1 : maxIts\r\n        numberToBeGuessed = randi(upperLim);\r\n        gOO = randperm(upperLim, 2);\r\n        diffs = abs( [gOO myGuess(upperLim, gOO)] - numberToBeGuessed );\r\n        winningContestant = find( min(diffs)==diffs );\r\n        if any( winningContestant == 3 ),\r\n            if length(winningContestant) == 1,\r\n                % Win\r\n                WDL(1) = WDL(1) + 1;  \r\n            else\r\n                % Draw\r\n                WDL(2) = WDL(2) + 1;  \r\n            end;\r\n        else\r\n            % Loss\r\n            WDL(3) = WDL(3) + 1;  \r\n        end;\r\n    end;\r\n    successRate = (WDL(1) + WDL(2)/2) / maxIts;\r\n    minAcceptableSuccessRate = getCutoff(upperLim);\r\n    %[upperLim minAcceptableSuccessRate successRate]\r\n    fprintf('N = %u, Threshold = %5.2f %c, Success rate = %5.2f %c.\\r\\n', upperLim, minAcceptableSuccessRate*100, '%', successRate*100, '%');\r\n    assert( successRate \u003e= minAcceptableSuccessRate )\r\nend;\r\ntoc\r\n\r\n% Define the minimum success rate that must be achieved.  \r\n% Note:  functions must be defined at the end of a script.  See https://au.mathworks.com/help/matlab/ref/function.html?s_tid=doc_ta#description\r\nfunction threshold = getCutoff(N)\r\n    % The success rate as a function of N is fit quite well \r\n    % by an equation of the form  s = sInf – A / N^k\r\n    expectedSuccessRate = 0.527353226 - 0.740005 / N^1.050420528;   \r\n    % (From fitting 310 points recorded to four decimal places.  \r\n    % The coefficients appear to be accurate to at least 3 significant figures.)  \r\n\r\n    % However, practically speaking we need to include a safety margin\r\n    % to avoid failing correct solutions on account of stochastic fluctuations.  \r\n    % A safety margin of 1 percentage point is almost always enough.  \r\n    % (1.5 percentage points would allow even more natural fluctuation, but would also risk passing incorrect 'solutions'.)  \r\n    threshold = expectedSuccessRate - 0.010;\r\nend","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":"2021-07-19T10:43:08.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2021-07-18T11:23:40.000Z","updated_at":"2021-07-25T08:12:28.000Z","published_at":"2021-07-18T15:01:47.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHave you tried the original \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/matlabcentral/cody/problems/44630-guess-the-number-i-m-thinking-of\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\\\"Guess the number I'm thinking of\\\" (Problem 44630)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e?  This problem is just like that, except that the range of possible numbers can change, and pre-calculated answers are explicitly disallowed.  Computing all possible permutations on the fly is not disallowed per se, but it is discouraged due to the high computational load involved.  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eI randomly choose 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003einteger\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e between\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\u003eone\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:b/\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 (inclusive).  \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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is an integer between 4 and 1000 (inclusive) that will be specified in each test as \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\u003eupperLimit\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e.  I don't provide any other clues about the number that is to be guessed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour first opponent tries to guess the number.  They guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour second opponent tries to guess the number.  They also guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou try to guess the number.  But you guess\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\u003estrategically\u003c/w:t\u003e\u003c/w:r\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number.  This represents a \\\"win\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \\\"draw\\\".  (It is a loss for the remaining contestant.)  A draw is worth half as much as a win.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\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\u003eguessesOfOpponents\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e).  Moreover, each guess must be unique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess.  But actually you have the advantage of extra knowledge.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBy guessing strategically, you should be able to\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\u003eachieve a \\\"success rate\\\" of substantially better than 33.3%\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e.  The success rate is defined as follows.  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003esuccess rate = (wins + draws/2) / games\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe precise value of the expected success rate (when guessing with the optimal strategy) depends upon the value of \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:  when \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 = 4 you should be able to achieve a success rate of 17/48 ≈ 35.4% on average, increasing monotonically to above 50% for \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 ≥ 24, eventually approaching an asymptote of 19/36 ≈ 52.8%.  (See the Test Suite for details of the thresholds applied.) \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRELATED PROBLEM:  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44630\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44630. Guess the number I'm thinking of (Part 1)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\"}]}"},{"id":772,"title":"TRON Tourney 000 : Clockwise Wall Hugger","description":"TRON Tournament is based upon the excellent TRON Challenge, \u003chttp://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge Cody 327\u003e, created by Alfonso Nieto-Castanon.\r\n\r\nI will implement, as practical, winning Player TRON-bots as Host TRON-bots.\r\n\r\nThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\r\n\r\nThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\r\n\r\nThe Host TRON-bot will be provided in the function template.\r\nIt is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\r\n\r\nThe TRON arena is fixed at 50x50.\r\n\r\nPlease visit the Cody 327 link for any info I may miss.\r\n\r\n\r\nBoard: 50x50\r\n\r\nWall: -3 (Rows 1 and 50, Columns 1 and 50)\r\n\r\nPlayer: 1\r\n\r\nHost: 2\r\n\r\nPlayer created wall: -1\r\n\r\nHost created wall: -2\r\n\r\n\r\nEmpty Spaces: 0\r\n\r\nPlayers start on either row 2 or column 2\r\n\r\nPlayers move simultaneously and thus a crash to the same spot is a tie.\r\n\r\nRunning into walls is a loss. \r\n\r\nSimultaneous wall crashing is a tie.\r\n\r\nGiven the board with its coverage make a Move, \"NESW\".\r\n\r\n\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\r\n\r\n*Input:* Board\r\n\r\n*Output:* (string 1 character) eg \"N\"\r\n\r\n*Score:* Perfect Score is 0 points (200-Wins*2-Ties/2)\r\n\r\nThe Test Suite has some very nice methods to implement checks.\r\n\r\nBot 000 is Alfonso's Clockwise Exterior Wall Hugger\r\n","description_html":"\u003cp\u003eTRON Tournament is based upon the excellent TRON Challenge, \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\"\u003eCody 327\u003c/a\u003e, created by Alfonso Nieto-Castanon.\u003c/p\u003e\u003cp\u003eI will implement, as practical, winning Player TRON-bots as Host TRON-bots.\u003c/p\u003e\u003cp\u003eThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\u003c/p\u003e\u003cp\u003eThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\u003c/p\u003e\u003cp\u003eThe Host TRON-bot will be provided in the function template.\r\nIt is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/p\u003e\u003cp\u003eThe TRON arena is fixed at 50x50.\u003c/p\u003e\u003cp\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/p\u003e\u003cp\u003eBoard: 50x50\u003c/p\u003e\u003cp\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/p\u003e\u003cp\u003ePlayer: 1\u003c/p\u003e\u003cp\u003eHost: 2\u003c/p\u003e\u003cp\u003ePlayer created wall: -1\u003c/p\u003e\u003cp\u003eHost created wall: -2\u003c/p\u003e\u003cp\u003eEmpty Spaces: 0\u003c/p\u003e\u003cp\u003ePlayers start on either row 2 or column 2\u003c/p\u003e\u003cp\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/p\u003e\u003cp\u003eRunning into walls is a loss.\u003c/p\u003e\u003cp\u003eSimultaneous wall crashing is a tie.\u003c/p\u003e\u003cp\u003eGiven the board with its coverage make a Move, \"NESW\".\u003c/p\u003e\u003cp\u003e\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Board\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e (string 1 character) eg \"N\"\u003c/p\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Perfect Score is 0 points (200-Wins*2-Ties/2)\u003c/p\u003e\u003cp\u003eThe Test Suite has some very nice methods to implement checks.\u003c/p\u003e\u003cp\u003eBot 000 is Alfonso's Clockwise Exterior Wall Hugger\u003c/p\u003e","function_template":"function move=tron(board)\r\n% Creator: Alfonso Nieto-Castanon\r\n% Botname: Base Clockwise Wall Hugger\r\n% Date: Early 2012\r\n% This is the Host bot of TRON Tourney 000\r\n str='NESW';\r\n D=[-1,50,1,-50];\r\n i=find(board==2); \r\n [nill,j]=max(~board(i+D)+.5*(board(i-D)==-2));\r\n move=str(j);\r\nend","test_suite":"%%\r\n% Core Code based upon TRON Cody 327 by Alfonso Nieto-Castanon\r\n% Tweaked to have 50 paired matches that swap starting positions\r\n% Passing Criteria modified to W-Ties/4 \u003e Losses\r\n% 10% of all matches against perfect bot are guaranteed losses\r\nglobal scr\r\n\r\n  doDraw=false; %set to true for display\r\n  %doDraw=true; %set to true for display\r\n  params=struct('n',50,'str','NESW','D',[-1,50,1,-50],'wins',[0,0,0]);\r\n   \r\n  y=clock;\r\n  rand('state',10000*y(6)); \r\n % rand('state',0); % Modify to make non-repeating\r\n  for nboards=1:50 \r\n      % initialize board\r\n      params.board=zeros(params.n);\r\n      params.board([1,end],:)=-3;\r\n      params.board(:,[1,end])=-3;\r\n      [i,j]=find(params.board|1); % creates idx  to [r,c] via magic\r\n      [nill,pos1]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos1)=1;\r\n      [nill,pos2]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos2)=2;\r\n      orig_pos1=pos1;\r\n      orig_pos2=pos2;\r\n   for game=1:2 \r\n       \r\n       if game==2 % Play reversed starting positions\r\n        params.board=zeros(params.n);\r\n        params.board([1,end],:)=-3;\r\n        params.board(:,[1,end])=-3;\r\n        pos1=orig_pos2;\r\n        pos2=orig_pos1;\r\n        params.board(pos1)=1;\r\n        params.board(pos2)=2;\r\n       end\r\n      \r\n      while 1\r\n          % blue's next movement\r\n          params.state=rand('state');\r\n          assignin('caller','params',params);\r\n       try   \r\n        d1=tron(params.board); % Player Move\r\n       catch\r\n        d1='S'; % Move S on error\r\n       end\r\n          \r\n          params=evalin('caller','params');\r\n          rand('state',params.state);\r\n          \r\n          \r\n          % red's next movement\r\n          i=find(params.board==2);\r\n          [nill,j]=max(~params.board(i+params.D)+.5*(params.board(i-params.D)==-2));\r\n          d2=params.str(j);\r\n       \r\n\r\n          % evaluate movements\r\n          d1=findstr(params.str,d1);\r\n          d2=findstr(params.str,d2);\r\n          \r\n          assert(~isempty(d1));          \r\n          params.board(pos1)=-1;\r\n          params.board(pos2)=-2;\r\n          pos1=pos1+params.D(d1);\r\n          pos2=pos2+params.D(d2);\r\n          if pos1==pos2||(params.board(pos1)\u0026\u0026params.board(pos2)), %tie\r\n              params.wins(2)=params.wins(2)+1;\r\n              if doDraw, disp('tie'); end\r\n              break;\r\n          elseif params.board(pos1), %lose\r\n              if doDraw, disp('lose'); end\r\n              %pause(0.5)\r\n              params.wins(3)=params.wins(3)+1;\r\n              break;\r\n          elseif params.board(pos2), %win\r\n              if doDraw, disp('win'); end\r\n              params.wins(1)=params.wins(1)+1;\r\n              break;\r\n          end\r\n          params.board(pos1)=1;\r\n          params.board(pos2)=2;\r\n          if doDraw\r\n              image(4+params.board);\r\n              axis equal off;\r\n              colormap([1,1,1;.5,0,0;0,0,.5;0,0,0;0,0,1;1,0,0]);\r\n              set(gcf,'color','k');\r\n              drawnow;\r\n          end\r\n      end\r\n      if doDraw, pause; end\r\n      \r\n   end % game\r\n  end % nboards\r\n    \r\n  disp(sprintf('%d wins; %d ties; %d losses',params.wins));\r\n\r\n% Make the size equal to 2*score\r\nscr=max(0,100-params.wins(1)-params.wins(2)/4);\r\n\r\n\r\n% W-T/4 \u003e Losses to Pass\r\nassert(params.wins(1)-params.wins(2)/4\u003eparams.wins(3),sprintf('%d wins; %d ties; %d losses',params.wins));\r\n\r\n%fh=fopen('tron.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,floor(scr)]) );\r\n%fclose(fh);\r\n%%\r\nglobal scr\r\n\r\nfeval(@assignin,'caller','score',floor(2*scr));\r\n\r\n%fh=fopen('tron.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,floor(scr)]) );\r\n%fclose(fh);\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2012-11-24T16:01:31.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-17T02:35:05.000Z","updated_at":"2012-11-24T16:01:31.000Z","published_at":"2012-06-17T04:05:26.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\u003eTRON Tournament is based upon the excellent TRON Challenge,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody 327\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, created by Alfonso Nieto-Castanon.\u003c/w:t\u003e\u003c/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\u003eI will implement, as practical, winning Player TRON-bots as Host TRON-bots.\u003c/w:t\u003e\u003c/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 Passing criteria is changed to Wins - Ties/4 \u0026gt; Losses.\u003c/w:t\u003e\u003c/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 100 Matches will be \\\"even\\\" as Host and Player will play the same 50 paired starting positions.\u003c/w:t\u003e\u003c/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 Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/w:t\u003e\u003c/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 TRON arena is fixed at 50x50.\u003c/w:t\u003e\u003c/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\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/w:t\u003e\u003c/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\u003eBoard: 50x50\u003c/w:t\u003e\u003c/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\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer: 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:t\u003eHost: 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\u003ePlayer created wall: -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:t\u003eHost created wall: -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\u003eEmpty Spaces: 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\u003ePlayers start on either row 2 or column 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\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/w:t\u003e\u003c/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\u003eRunning into walls is a loss.\u003c/w:t\u003e\u003c/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\u003eSimultaneous wall crashing is a tie.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the board with its coverage make a Move, \\\"NESW\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\"N\\\" idx-1; \\\"E\\\" idx+50, \\\"S\\\" idx+1, and \\\"W\\\" is idx-50.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Board\u003c/w:t\u003e\u003c/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 (string 1 character) eg \\\"N\\\"\u003c/w:t\u003e\u003c/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\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Perfect Score is 0 points (200-Wins*2-Ties/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\u003eThe Test Suite has some very nice methods to implement checks.\u003c/w:t\u003e\u003c/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\u003eBot 000 is Alfonso's Clockwise Exterior Wall Hugger\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":773,"title":"TRON Tourney 010: Fixed Pattern CCW","description":"TRON Tournament is based upon the excellent TRON Challenge, \u003chttp://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge Cody 327\u003e, created by Alfonso Nieto-Castanon.\r\n\r\nHost Bot: Fixed Pattern CCW - Weak \r\n\r\nThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\r\n\r\nThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\r\n\r\nThe Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\r\n\r\nThe TRON arena is fixed at 50x50.\r\n\r\nPlease visit the Cody 327 link for any info I may miss.\r\n\r\nBoard: 50x50\r\n\r\nWall: -3 (Rows 1 and 50, Columns 1 and 50)\r\n\r\nPlayer: 1\r\n\r\nHost: 2\r\n\r\nPlayer created wall: -1\r\n\r\nHost created wall: -2\r\n\r\nEmpty Spaces: 0\r\n\r\nPlayers start on either row 2 or column 2\r\n\r\nPlayers move simultaneously and thus a crash to the same spot is a tie.\r\n\r\nRunning into a wall first is a loss.\r\n\r\nSimultaneous wall crashing is a tie.\r\n\r\nGiven the board with its coverage make a Move, \"NESW\".\r\n\r\n\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\r\n\r\n*Input:* Board\r\n\r\n*Output:* (string 1 character) eg \"N\"\r\n\r\n*Score:* Perfect Score is 0 points (200-Wins*2-Ties/2), 100 L scores 200\r\n\r\nThe Test Suite has some very nice methods to implement checks.\r\n\r\nBot 010 is Rick's CCW Fixed Pattern Bot - Weak","description_html":"\u003cp\u003eTRON Tournament is based upon the excellent TRON Challenge, \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\"\u003eCody 327\u003c/a\u003e, created by Alfonso Nieto-Castanon.\u003c/p\u003e\u003cp\u003eHost Bot: Fixed Pattern CCW - Weak\u003c/p\u003e\u003cp\u003eThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\u003c/p\u003e\u003cp\u003eThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\u003c/p\u003e\u003cp\u003eThe Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/p\u003e\u003cp\u003eThe TRON arena is fixed at 50x50.\u003c/p\u003e\u003cp\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/p\u003e\u003cp\u003eBoard: 50x50\u003c/p\u003e\u003cp\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/p\u003e\u003cp\u003ePlayer: 1\u003c/p\u003e\u003cp\u003eHost: 2\u003c/p\u003e\u003cp\u003ePlayer created wall: -1\u003c/p\u003e\u003cp\u003eHost created wall: -2\u003c/p\u003e\u003cp\u003eEmpty Spaces: 0\u003c/p\u003e\u003cp\u003ePlayers start on either row 2 or column 2\u003c/p\u003e\u003cp\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/p\u003e\u003cp\u003eRunning into a wall first is a loss.\u003c/p\u003e\u003cp\u003eSimultaneous wall crashing is a tie.\u003c/p\u003e\u003cp\u003eGiven the board with its coverage make a Move, \"NESW\".\u003c/p\u003e\u003cp\u003e\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Board\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e (string 1 character) eg \"N\"\u003c/p\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Perfect Score is 0 points (200-Wins*2-Ties/2), 100 L scores 200\u003c/p\u003e\u003cp\u003eThe Test Suite has some very nice methods to implement checks.\u003c/p\u003e\u003cp\u003eBot 010 is Rick's CCW Fixed Pattern Bot - Weak\u003c/p\u003e","function_template":"function move=tron(board)\r\n% Creator: Richard Zapor\r\n% BotName: Map50 vs Clockwise Bot\r\n% Fixed Pattern Bot - Very Weak but Crushes CW Wall Hugger\r\n% Date: 6/8/2012\r\n  str='NESW';\r\n  map50=str2num('reshape([ones(1,101)*2 ones(1,46)*3 2 2 zeros(1,2202) 3 4 4 ones(1,47) 3 4 zeros(1,97)],50,50)+(reshape([zeros(1,53) ones(1,44)*3 zeros(1,6) ones(1,44)*4 zeros(1,6) 3 ones(1,43)*4 zeros(1,6) ones(1,43)*2 3 zeros(1,2106) ones(1,44)*2 zeros(1,6) ones(1,44)*2 zeros(1,53)],50,50))''');\r\n  try\r\n   move=str(map50(find(board==1)));  \r\n  catch\r\n   move='S';\r\n  end\r\nend","test_suite":"% Passing Criteria modified to W-Ties/4 \u003e Losses\r\n% 10% of all matches against perfect bot are guaranteed losses\r\nglobal scr\r\n\r\n  doDraw=false; %set to true for display\r\n  %doDraw=true; %set to true for display\r\n  params=struct('n',50,'str','NESW','D',[-1,50,1,-50],'wins',[0,0,0]);\r\n   \r\n  y=clock;\r\n  rand('state',10000*y(6)); \r\n  map50=str2num('reshape([ones(1,101)*2 ones(1,46)*3 2 2 zeros(1,2202) 3 4 4 ones(1,47) 3 4 zeros(1,97)],50,50)+(reshape([zeros(1,53) ones(1,44)*3 zeros(1,6) ones(1,44)*4 zeros(1,6) 3 ones(1,43)*4 zeros(1,6) ones(1,43)*2 3 zeros(1,2106) ones(1,44)*2 zeros(1,6) ones(1,44)*2 zeros(1,53)],50,50))''');\r\n % rand('state',0); % Modify to make non-repeating\r\n  for nboards=1:50 \r\n      % initialize board\r\n      params.board=zeros(params.n);\r\n      params.board([1,end],:)=-3;\r\n      params.board(:,[1,end])=-3;\r\n      [i,j]=find(params.board|1); % creates idx  to [r,c] via magic\r\n      [nill,pos1]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos1)=1;\r\n      [nill,pos2]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos2)=2;\r\n      orig_pos1=pos1;\r\n      orig_pos2=pos2;\r\n   for game=1:2 \r\n       \r\n       if game==2 % Play reversed starting positions\r\n        params.board=zeros(params.n);\r\n        params.board([1,end],:)=-3;\r\n        params.board(:,[1,end])=-3;\r\n        pos1=orig_pos2;\r\n        pos2=orig_pos1;\r\n        params.board(pos1)=1;\r\n        params.board(pos2)=2;\r\n       end\r\n      \r\n      while 1\r\n          % blue's next movement\r\n          params.state=rand('state');\r\n          assignin('caller','params',params);\r\n      try    \r\n        d1=tron(params.board); % Player Move\r\n      catch\r\n        d1='S';\r\n       end\r\n          \r\n          params=evalin('caller','params');\r\n          rand('state',params.state);\r\n          \r\n          \r\n          % red's next movement\r\n% Creator: Richard Zapor\r\n% BotName: Map50 vs Clockwise Bot\r\n% Date: 6/8/2012\r\n  str='NESW';\r\n%  map50=str2num('reshape([ones(1,101)*2 ones(1,46)*3 2 2 zeros(1,2202) 3 4 4 ones(1,47) 3 4 zeros(1,97)],50,50)+(reshape([zeros(1,53) ones(1,44)*3 zeros(1,6) ones(1,44)*4 zeros(1,6) 3 ones(1,43)*4 zeros(1,6) ones(1,43)*2 3 zeros(1,2106) ones(1,44)*2 zeros(1,6) ones(1,44)*2 zeros(1,53)],50,50))''');\r\n  try\r\n   move=str(map50(find(params.board==2)));  \r\n  catch\r\n   move='S';\r\n  end\r\n  d2=move;\r\n       \r\n\r\n          % evaluate movements\r\n          d1=findstr(params.str,d1);\r\n          d2=findstr(params.str,d2);\r\n          \r\n          assert(~isempty(d1));          \r\n          params.board(pos1)=-1;\r\n          params.board(pos2)=-2;\r\n          pos1=pos1+params.D(d1);\r\n          pos2=pos2+params.D(d2);\r\n          if pos1==pos2||(params.board(pos1)\u0026\u0026params.board(pos2)), %tie\r\n              params.wins(2)=params.wins(2)+1;\r\n              if doDraw, disp('tie'); end\r\n              break;\r\n          elseif params.board(pos1), %lose\r\n              if doDraw, disp('lose'); end\r\n              %pause(0.5)\r\n              params.wins(3)=params.wins(3)+1;\r\n              break;\r\n          elseif params.board(pos2), %win\r\n              if doDraw, disp('win'); end\r\n              params.wins(1)=params.wins(1)+1;\r\n              break;\r\n          end\r\n          params.board(pos1)=1;\r\n          params.board(pos2)=2;\r\n          if doDraw\r\n              image(4+params.board);\r\n              axis equal off;\r\n              colormap([1,1,1;.5,0,0;0,0,.5;0,0,0;0,0,1;1,0,0]);\r\n              set(gcf,'color','k');\r\n              drawnow;\r\n          end\r\n      end\r\n      if doDraw, pause; end\r\n      \r\n   end % game\r\n  end % nboards\r\n    \r\n  disp(sprintf('%d wins; %d ties; %d losses',params.wins));\r\n\r\n% Make the size equal to 100-W-T/4  Perfect=0, 100 L scores 200\r\nscr=100-params.wins(1)-params.wins(2)/4;\r\n\r\n\r\n% W-T/4 \u003e Losses to Pass\r\nassert(params.wins(1)-params.wins(2)/4\u003eparams.wins(3),sprintf('%d wins; %d ties; %d losses',params.wins));\r\n%%\r\n% Implement tron.m resizing to scr when assert W-T/4\u003eL  Fails\r\nglobal scr\r\n\r\nfeval(@assignin,'caller','score',floor(2*scr));\r\n\r\n%fh=fopen('tron.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,floor(scr)]) );\r\n%fclose(fh);","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2012-11-24T15:58:19.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-18T00:51:07.000Z","updated_at":"2012-11-24T15:58:19.000Z","published_at":"2012-06-18T03:16:51.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\u003eTRON Tournament is based upon the excellent TRON Challenge,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody 327\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, created by Alfonso Nieto-Castanon.\u003c/w:t\u003e\u003c/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\u003eHost Bot: Fixed Pattern CCW - Weak\u003c/w:t\u003e\u003c/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 Passing criteria is changed to Wins - Ties/4 \u0026gt; Losses.\u003c/w:t\u003e\u003c/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 100 Matches will be \\\"even\\\" as Host and Player will play the same 50 paired starting positions.\u003c/w:t\u003e\u003c/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 Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/w:t\u003e\u003c/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 TRON arena is fixed at 50x50.\u003c/w:t\u003e\u003c/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\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/w:t\u003e\u003c/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\u003eBoard: 50x50\u003c/w:t\u003e\u003c/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\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer: 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:t\u003eHost: 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\u003ePlayer created wall: -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:t\u003eHost created wall: -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\u003eEmpty Spaces: 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\u003ePlayers start on either row 2 or column 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\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/w:t\u003e\u003c/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\u003eRunning into a wall first is a loss.\u003c/w:t\u003e\u003c/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\u003eSimultaneous wall crashing is a tie.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the board with its coverage make a Move, \\\"NESW\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\"N\\\" idx-1; \\\"E\\\" idx+50, \\\"S\\\" idx+1, and \\\"W\\\" is idx-50.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Board\u003c/w:t\u003e\u003c/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 (string 1 character) eg \\\"N\\\"\u003c/w:t\u003e\u003c/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\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Perfect Score is 0 points (200-Wins*2-Ties/2), 100 L scores 200\u003c/w:t\u003e\u003c/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 Test Suite has some very nice methods to implement checks.\u003c/w:t\u003e\u003c/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\u003eBot 010 is Rick's CCW Fixed Pattern Bot - Weak\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":44728,"title":"Nash Equilibrium","description":"In game theory, a player's *strategy* is any of the options that can be chosen in a setting where the pay-off depends not only on the player's action but on the action of every player. \r\n\r\nConsider two prisoners held in separate cells, interrogated simultaneously, and offered deals (lighter jail sentences) for betraying their fellow criminal. The prisoner's strategy can either be to \"cooperate\" or \"defect\".\r\n\r\n   Prisoner 1, Prisoner 2  | Co-operate (with other)  |  Defect (betray other)\r\n  _____________________________________________________________________________\r\n   Co-operate (with other) |           1 , 1          |         4 , 0\r\n   Defect (betray other)   |           0 , 4          |         2 , 2\r\n\r\nA *strategy profile* is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player. In the case of the prisoners, there are four possible strategy profile as shown in the table cells above. \r\n\r\n\r\nA *pay-off* is usually associated with every strategy profile. In the case of the prisoners, if they both co-operate, they both get a pay-off (prison sentence) of 1 year.\r\n\r\nA strategy profile is a *Nash equilibrium* if no player can do better by unilaterally changing only his or her strategy. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.\r\n\r\nThe Nash equilibrium depends on if the objective is to minimize or maximize the pay-off matrix:\r\n\r\nIf the players intend to minimize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to defect. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets a higher prison sentence of 4 years. \r\n\r\nIf the players intend to maximize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to co-operate. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets to walk free. \r\n\r\nFor a given two-player game with each player having n strategies, the pay-off matrix P is given as a _n x n_ cell array, which elements specifies a strategy profile and the corresponding pay-offs. In the case of the prisoners\r\n\r\n       P =  {[1, 1]  [4, 0];\r\n             [0, 4]  [2, 2]} \r\n\r\nGiven the pay-off matrix P and an objective (min or max), return the 2D index of all the Nash equilibria (i.e. the strategy profile) in a k x 2 matrix and the corresponding pay-off in a column cell array.\r\n","description_html":"\u003cp\u003eIn game theory, a player's \u003cb\u003estrategy\u003c/b\u003e is any of the options that can be chosen in a setting where the pay-off depends not only on the player's action but on the action of every player.\u003c/p\u003e\u003cp\u003eConsider two prisoners held in separate cells, interrogated simultaneously, and offered deals (lighter jail sentences) for betraying their fellow criminal. The prisoner's strategy can either be to \"cooperate\" or \"defect\".\u003c/p\u003e\u003cpre\u003e   Prisoner 1, Prisoner 2  | Co-operate (with other)  |  Defect (betray other)\r\n  _____________________________________________________________________________\r\n   Co-operate (with other) |           1 , 1          |         4 , 0\r\n   Defect (betray other)   |           0 , 4          |         2 , 2\u003c/pre\u003e\u003cp\u003eA \u003cb\u003estrategy profile\u003c/b\u003e is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player. In the case of the prisoners, there are four possible strategy profile as shown in the table cells above.\u003c/p\u003e\u003cp\u003eA \u003cb\u003epay-off\u003c/b\u003e is usually associated with every strategy profile. In the case of the prisoners, if they both co-operate, they both get a pay-off (prison sentence) of 1 year.\u003c/p\u003e\u003cp\u003eA strategy profile is a \u003cb\u003eNash equilibrium\u003c/b\u003e if no player can do better by unilaterally changing only his or her strategy. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.\u003c/p\u003e\u003cp\u003eThe Nash equilibrium depends on if the objective is to minimize or maximize the pay-off matrix:\u003c/p\u003e\u003cp\u003eIf the players intend to minimize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to defect. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets a higher prison sentence of 4 years.\u003c/p\u003e\u003cp\u003eIf the players intend to maximize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to co-operate. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets to walk free.\u003c/p\u003e\u003cp\u003eFor a given two-player game with each player having n strategies, the pay-off matrix P is given as a \u003ci\u003en x n\u003c/i\u003e cell array, which elements specifies a strategy profile and the corresponding pay-offs. In the case of the prisoners\u003c/p\u003e\u003cpre\u003e       P =  {[1, 1]  [4, 0];\r\n             [0, 4]  [2, 2]} \u003c/pre\u003e\u003cp\u003eGiven the pay-off matrix P and an objective (min or max), return the 2D index of all the Nash equilibria (i.e. the strategy profile) in a k x 2 matrix and the corresponding pay-off in a column cell array.\u003c/p\u003e","function_template":"function [payoff, strategy] = NashEquilibria(P,obj)\r\n   \r\nend","test_suite":"\r\nS = {[4, 4] [1, 3]; \r\n     [3, 1] [2, 2]}; \r\nobj = 'max';\r\npayoff_correct = {[4, 4]; [2, 2]};\r\nstrategy_correct = [1 1;\r\n               2 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[4  4] [1  3]; \r\n     [3  1] [2  2]}; \r\nobj = 'min';\r\npayoff_correct = {[3 1]; [1 3]};\r\nstrategy_correct = [2 1;\r\n               1 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[10  10] [ 0   0]; \r\n     [ 0   0] [10  10]}; \r\nobj = 'max';\r\npayoff_correct = {[10 10]; [10 10]};\r\nstrategy_correct = [1 1;\r\n               2 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[10  10] [ 0   0]; \r\n     [ 0   0] [10  10]}; \r\nobj = 'min';\r\npayoff_correct = {[0 0]; [0 0]};\r\nstrategy_correct = [2 1;\r\n               1 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[1  1] [4  0]; \r\n     [0  4] [2  2]}; \r\nobj = 'min';\r\npayoff_correct = {[2 2]};\r\nstrategy_correct = [2 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[1  1] [4  0]; \r\n     [0  4] [2  2]}; \r\nobj = 'max';\r\npayoff_correct = {[1 1]};\r\nstrategy_correct = [1 1];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0  0] [25 40]  [ 5  10]; \r\n     [40 25] [ 0  0]  [ 5  15];\r\n     [10  5] [15  5]  [10  10]}; \r\nobj = 'max';\r\npayoff_correct = {[40 25]; [25 40]; [10 10]};\r\nstrategy_correct = [2  1;\r\n               1  2;\r\n               3  3];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0  0] [25 40]  [ 5  10]; \r\n     [40 25] [ 0  0]  [ 5  15];\r\n     [10  5] [15  5]  [10  10]}; \r\nobj = 'min';\r\npayoff_correct = {[0 0]; [0 0]};\r\nstrategy_correct = [1  1;\r\n               2  2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0,0] [ 2,-2]  [2,-2]  [2,-2]; \r\n     [-2,2] [ 1, 1]  [3,-1]  [3,-1];\r\n     [-2,2] [-1, 3]  [2, 2]  [4, 0]\r\n     [-2,2] [-1, 3]  [0, 4]  [3, 3]}; \r\nobj = 'max';\r\npayoff_correct = {[0, 0]};\r\nstrategy_correct = [1, 1];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0,0] [ 2,-2]  [2,-2]  [2,-2]; \r\n     [-2,2] [ 1, 1]  [3,-1]  [3,-1];\r\n     [-2,2] [-1, 3]  [2, 2]  [4, 0]\r\n     [-2,2] [-1, 3]  [0, 4]  [3, 3]}; \r\nobj = 'min';\r\npayoff_correct = {[-2, 2]; [2, -2]};\r\nstrategy_correct = [4, 1\r\n               1, 4];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\n\r\n ","published":true,"deleted":false,"likes_count":7,"comments_count":1,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-12T00:08:17.000Z","updated_at":"2025-04-25T08:30:55.000Z","published_at":"2018-08-12T00:09:08.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\u003eIn game theory, a player's\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\u003estrategy\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is any of the options that can be chosen in a setting where the pay-off depends not only on the player's action but on the action of every 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\u003eConsider two prisoners held in separate cells, interrogated simultaneously, and offered deals (lighter jail sentences) for betraying their fellow criminal. The prisoner's strategy can either be to \\\"cooperate\\\" or \\\"defect\\\".\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[   Prisoner 1, Prisoner 2  | Co-operate (with other)  |  Defect (betray other)\\n  _____________________________________________________________________________\\n   Co-operate (with other) |           1 , 1          |         4 , 0\\n   Defect (betray other)   |           0 , 4          |         2 , 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\u003eA\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\u003estrategy profile\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player. In the case of the prisoners, there are four possible strategy profile as shown in the table cells above.\u003c/w:t\u003e\u003c/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\u003eA\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\u003epay-off\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is usually associated with every strategy profile. In the case of the prisoners, if they both co-operate, they both get a pay-off (prison sentence) of 1 year.\u003c/w:t\u003e\u003c/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\u003eA strategy profile is a\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\u003eNash equilibrium\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e if no player can do better by unilaterally changing only his or her strategy. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.\u003c/w:t\u003e\u003c/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 Nash equilibrium depends on if the objective is to minimize or maximize the pay-off 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:t\u003eIf the players intend to minimize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to defect. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets a higher prison sentence of 4 years.\u003c/w:t\u003e\u003c/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 the players intend to maximize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to co-operate. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets to walk free.\u003c/w:t\u003e\u003c/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\u003eFor a given two-player game with each player having n strategies, the pay-off matrix P is given as a\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 x n\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e cell array, which elements specifies a strategy profile and the corresponding pay-offs. In the case of the prisoners\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[       P =  {[1, 1]  [4, 0];\\n             [0, 4]  [2, 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\u003eGiven the pay-off matrix P and an objective (min or max), return the 2D index of all the Nash equilibria (i.e. the strategy profile) in a k x 2 matrix and the corresponding pay-off in a column cell array.\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":879,"title":"Perform Rubik's Cube Moves","description":"A standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The F move would map 19 to 25,..., 7 goes to 18,..., and 23 is unchanged.\r\n\r\nThe moves X( R ), Y(U), and Z(F) rotate the entire cube with its associated face.\r\nX would map 23 to 14. (19:27) moves to (10:18). Only contents of 5 and 50 are unchanged There are also X' and X2 moves.\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/cube_small.gif\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Cube_Map28_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (mov,rubik)\r\n  mov: is an integer 1:27 representing the moves in order: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2XYZX'Y'Z'X2Y2Z2\r\n  rubik: row vector of size 54\r\n  (A normal cube would have values 0:5 in locations 1:54,\r\n  The test input is generally numbered 1:54 to check that each tile is correctly remapped. A normal cube with 6 values may be used in testing)\r\n\r\n  Output: rubik vector of the input cubes values remapped based upon mov\r\n\r\nAll 27 moves are enumerated in the test suite\r\n\r\nFollow-up Challenges will be solving the cube at various move depths for time and actual face moves required.\r\n \r\nNote: Images inserted/linked to my free google web page. Used a gif and a png.\r\n\r\n\r\n\r\n\r\n","description_html":"\u003cp\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face numbering.\u003c/p\u003e\u003cp\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/p\u003e\u003cp\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The F move would map 19 to 25,..., 7 goes to 18,..., and 23 is unchanged.\u003c/p\u003e\u003cp\u003eThe moves X( R ), Y(U), and Z(F) rotate the entire cube with its associated face.\r\nX would map 23 to 14. (19:27) moves to (10:18). Only contents of 5 and 50 are unchanged There are also X' and X2 moves.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/cube_small.gif\"\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/Cube_Map28_200.png\"\u003e\u003cimg src=\"http://mathworks.com/matlabcentral/images/surf.gif\"\u003e\u003cpre class=\"language-matlab\"\u003eInput: (mov,rubik)\r\nmov: is an integer 1:27 representing the moves in order: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2XYZX'Y'Z'X2Y2Z2\r\nrubik: row vector of size 54\r\n(A normal cube would have values 0:5 in locations 1:54,\r\nThe test input is generally numbered 1:54 to check that each tile is correctly remapped. A normal cube with 6 values may be used in testing)\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eOutput: rubik vector of the input cubes values remapped based upon mov\r\n\u003c/pre\u003e\u003cp\u003eAll 27 moves are enumerated in the test suite\u003c/p\u003e\u003cp\u003eFollow-up Challenges will be solving the cube at various move depths for time and actual face moves required.\u003c/p\u003e\u003cp\u003eNote: Images inserted/linked to my free google web page. Used a gif and a png.\u003c/p\u003e","function_template":"function r = rubik_rot(mov,r)\r\n  r=r;\r\nend","test_suite":"%%\r\n% Single move cases\r\nmov=1; % U\r\nr=1:54;\r\nr_exp=[19 2 3 22 5 6 25 8 9 12 15 18 11 14 17 10 13 16 46 20 21 49 23 24 52 26 27 28 29 30 31 32 33 34 35 36 37 38 7 40 41 4 43 44 1 45 47 48 42 50 51 39 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=7; % U'\r\nr=1:54;\r\nr_exp=[45 2 3 42 5 6 39 8 9 16 13 10 17 14 11 18 15 12 1 20 21 4 23 24 7 26 27 28 29 30 31 32 33 34 35 36 37 38 52 40 41 49 43 44 46 19 47 48 22 50 51 25 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=13; % U2\r\nr=1:54;\r\nr_exp=[46 2 3 49 5 6 52 8 9 18 17 16 15 14 13 12 11 10 45 20 21 42 23 24 39 26 27 28 29 30 31 32 33 34 35 36 37 38 25 40 41 22 43 44 19 1 47 48 4 50 51 7 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=19; % X\r\nr=1:54;\r\nr_exp=[7 4 1 8 5 2 9 6 3 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 10 11 12 13 14 15 16 17 18 48 51 54 47 50 53 46 49 52];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=22; % X'\r\nr=1:54;\r\nr_exp=[3 6 9 2 5 8 1 4 7 37 38 39 40 41 42 43 44 45 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 52 49 46 53 50 47 54 51 48];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=25; % X2\r\nr=1:54;\r\nr_exp=[9 8 7 6 5 4 3 2 1 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 54 53 52 51 50 49 48 47 46];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining CW Face moves 2-6\r\nmov=2; % F\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 28 31 34 10 11 9 13 14 8 16 17 7 21 24 27 20 23 26 19 22 25 48 29 30 47 32 33 46 35 36 37 38 39 40 41 42 43 44 45 12 15 18 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=3; % D\r\nr=1:54;\r\nr_exp=[1 2 43 4 5 40 7 8 37 10 11 12 13 14 15 16 17 18 19 20 3 22 23 6 25 26 9 30 33 36 29 32 35 28 31 34 54 38 39 51 41 42 48 44 45 46 47 21 49 50 24 52 53 27];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=4; % L\r\nr=1:54;\r\nr_exp=[3 6 9 2 5 8 1 4 7 37 38 39 13 14 15 16 17 18 10 11 12 22 23 24 25 26 27 19 20 21 31 32 33 34 35 36 28 29 30 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=5; % B\r\nr=1:54;\r\nr_exp=[16 13 10 4 5 6 7 8 9 52 11 12 53 14 15 54 17 18 19 20 21 22 23 24 25 26 27 28 29 1 31 32 2 34 35 3 39 42 45 38 41 44 37 40 43 46 47 48 49 50 51 36 33 30];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=6; % R\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 25 26 27 19 20 21 22 23 24 34 35 36 28 29 30 31 32 33 43 44 45 37 38 39 40 41 42 16 17 18 48 51 54 47 50 53 46 49 52];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining CCW Face moves 8-12\r\nmov=8; % F'\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 18 15 12 10 11 46 13 14 47 16 17 48 25 22 19 26 23 20 27 24 21 7 29 30 8 32 33 9 35 36 37 38 39 40 41 42 43 44 45 34 31 28 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=9; % D'\r\nr=1:54;\r\nr_exp=[1 2 21 4 5 24 7 8 27 10 11 12 13 14 15 16 17 18 19 20 48 22 23 51 25 26 54 34 31 28 35 32 29 36 33 30 9 38 39 6 41 42 3 44 45 46 47 43 49 50 40 52 53 37];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=10; % L'\r\nr=1:54;\r\nr_exp=[7 4 1 8 5 2 9 6 3 19 20 21 13 14 15 16 17 18 28 29 30 22 23 24 25 26 27 37 38 39 31 32 33 34 35 36 10 11 12 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=11; % B'\r\nr=1:54;\r\nr_exp=[30 33 36 4 5 6 7 8 9 3 11 12 2 14 15 1 17 18 19 20 21 22 23 24 25 26 27 28 29 54 31 32 53 34 35 52 43 40 37 44 41 38 45 42 39 46 47 48 49 50 51 10 13 16];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=12; % R'\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 43 44 45 19 20 21 22 23 24 16 17 18 28 29 30 31 32 33 25 26 27 37 38 39 40 41 42 34 35 36 52 49 46 53 50 47 54 51 48];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Double Face moves 14-18\r\nmov=14; % F2\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 48 47 46 10 11 34 13 14 31 16 17 28 27 26 25 24 23 22 21 20 19 18 29 30 15 32 33 12 35 36 37 38 39 40 41 42 43 44 45 9 8 7 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=15; % D2\r\nr=1:54;\r\nr_exp=[1 2 48 4 5 51 7 8 54 10 11 12 13 14 15 16 17 18 19 20 43 22 23 40 25 26 37 36 35 34 33 32 31 30 29 28 27 38 39 24 41 42 21 44 45 46 47 3 49 50 6 52 53 9];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=16; % L2\r\nr=1:54;\r\nr_exp=[9 8 7 6 5 4 3 2 1 28 29 30 13 14 15 16 17 18 37 38 39 22 23 24 25 26 27 10 11 12 31 32 33 34 35 36 19 20 21 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=17; % B2\r\nr=1:54;\r\nr_exp=[54 53 52 4 5 6 7 8 9 36 11 12 33 14 15 30 17 18 19 20 21 22 23 24 25 26 27 28 29 16 31 32 13 34 35 10 45 44 43 42 41 40 39 38 37 46 47 48 49 50 51 3 2 1];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=18; % R2\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 34 35 36 19 20 21 22 23 24 43 44 45 28 29 30 31 32 33 16 17 18 37 38 39 40 41 42 25 26 27 54 53 52 51 50 49 48 47 46];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Cube CW moves 20-21\r\nmov=20; % Y\r\nr=1:54;\r\nr_exp=[19 20 21 22 23 24 25 26 27 12 15 18 11 14 17 10 13 16 46 47 48 49 50 51 52 53 54 34 31 28 35 32 29 36 33 30 9 8 7 6 5 4 3 2 1 45 44 43 42 41 40 39 38 37];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=21; % Z\r\nr=1:54;\r\nr_exp=[30 33 36 29 32 35 28 31 34 3 6 9 2 5 8 1 4 7 21 24 27 20 23 26 19 22 25 48 51 54 47 50 53 46 49 52 43 40 37 44 41 38 45 42 39 12 15 18 11 14 17 10 13 16];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Cube CCW moves 23-24\r\nmov=23; % Y\r\nr=1:54;\r\nr_exp=[45 44 43 42 41 40 39 38 37 16 13 10 17 14 11 18 15 12 1 2 3 4 5 6 7 8 9 30 33 36 29 32 35 28 31 34 54 53 52 51 50 49 48 47 46 19 20 21 22 23 24 25 26 27];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=24; % Z\r\nr=1:54;\r\nr_exp=[16 13 10 17 14 11 18 15 12 52 49 46 53 50 47 54 51 48 25 22 19 26 23 20 27 24 21 7 4 1 8 5 2 9 6 3 39 42 45 38 41 44 37 40 43 34 31 28 35 32 29 36 33 30];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Cube Half Rotate moves 26-27\r\nmov=26; % Y\r\nr=1:54;\r\nr_exp=[46 47 48 49 50 51 52 53 54 18 17 16 15 14 13 12 11 10 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 1 2 3 4 5 6 7 8 9];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=27; % Z\r\nr=1:54;\r\nr_exp=[54 53 52 51 50 49 48 47 46 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 45 44 43 42 41 40 39 38 37 9 8 7 6 5 4 3 2 1];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Verify that values in the array are returned and not positions\r\nmov=2; % F\r\nr=1:54;\r\nr=r*0; % The simplest Cube - Solid\r\nr_exp=r; \r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Perform Sequence of moves and then back\r\nr=1:54;\r\nr_exp=r; \r\nmov=1; % U\r\nr=rubik_rot(mov,r);\r\nmov=2; % F\r\nr=rubik_rot(mov,r);\r\nmov=3; % D\r\nr=rubik_rot(mov,r);\r\nmov=4; % L\r\nr=rubik_rot(mov,r);\r\nmov=5; % B\r\nr=rubik_rot(mov,r);\r\nmov=6; % R\r\nr=rubik_rot(mov,r);\r\nmov=12; % R'\r\nr=rubik_rot(mov,r);\r\nmov=11; % B'\r\nr=rubik_rot(mov,r);\r\nmov=10; % L'\r\nr=rubik_rot(mov,r);\r\nmov=9; % D'\r\nr=rubik_rot(mov,r);\r\nmov=8; % F'\r\nr=rubik_rot(mov,r);\r\nmov=7; % U'\r\n\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-08-05T05:47:50.000Z","updated_at":"2026-03-28T16:32:39.000Z","published_at":"2012-08-05T19:30:31.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.gif\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image2.gif\"}],\"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\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face numbering.\u003c/w:t\u003e\u003c/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 faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/w:t\u003e\u003c/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\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The F move would map 19 to 25,..., 7 goes to 18,..., and 23 is unchanged.\u003c/w:t\u003e\u003c/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 moves X( R ), Y(U), and Z(F) rotate the entire cube with its associated face. X would map 23 to 14. (19:27) moves to (10:18). Only contents of 5 and 50 are unchanged There are also X' and X2 moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw: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: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=\\\"rId2\\\"/\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: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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (mov,rubik)\\nmov: is an integer 1:27 representing the moves in order: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2XYZX'Y'Z'X2Y2Z2\\nrubik: row vector of size 54\\n(A normal cube would have values 0:5 in locations 1:54,\\nThe test input is generally numbered 1:54 to check that each tile is correctly remapped. A normal cube with 6 values may be used in testing)\\n\\nOutput: rubik vector of the input cubes values remapped based upon mov]]\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\u003eAll 27 moves are enumerated in the test suite\u003c/w:t\u003e\u003c/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\u003eFollow-up Challenges will be solving the cube at various move depths for time and actual face moves required.\u003c/w:t\u003e\u003c/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\u003eNote: Images inserted/linked to my free google web page. Used a gif and a png.\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.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"}]}"},{"id":61067,"title":"Transition Matrix for the Royal Game of Err","description":"Bored of tedious court assemblies, King Neduchadneddar the Procrastinator has found a cunning way to keep his advisors, councilors, viziers, and other courtly lackeys busy: he plays a simple and pointless board game with them.\r\nPlayers move their pawn along a path of n squares, starting at square 1, with the goal of being the first to reach square n. On each turn, they roll an m-sided die to determine how many squares to move. However, if their move would take them beyond the nth square, they stay put. Also, players cannot land on any of the numbers that King Neduchadneddar has decided are the unlucky numbers of the day. If their move would land them on any of these squares, they stay put instead.\r\nTo keep his courtiers on their toes (so they have less time to plot his downfall), the king changes the number of squares (n), the number of sides of the die (m), and the list of unlucky forbidden squares each day.\r\nNeeding to know how much time he will waste with each game, the king in his wisdom (and/or insanity) has appointed you Chief Royal Mage of Matrix Computations and tasked you with determining the average number of moves it will take a player to complete a game according to today’s setup.\r\nYour first task to achieve this important goal is to build the transition matrix for the game, given n, m, and nogo (a vector of the forbidden numbers). The transition matrix T is an n-by-n matrix where T(j,k) is the probability of moving from square j to square k in one move.\r\n\r\nExample\r\nIf n = 8 and m = 3, with no forbidden squares the transition matrix would be:\r\n0      1/3    1/3    1/3    0      0      0      0       \r\n0      0      1/3    1/3    1/3    0      0      0       \r\n0      0      0      1/3    1/3    1/3    0      0       \r\n0      0      0      0      1/3    1/3    1/3    0       \r\n0      0      0      0      0      1/3    1/3    1/3     \r\n0      0      0      0      0      1/3    1/3    1/3     \r\n0      0      0      0      0      0      2/3    1/3     \r\n0      0      0      0      0      0      0      1\r\nGenerally, from square j there is a 1/3 chance of moving to j+1, j+2, or j+3. However, for j = 6, there is a 1/3 chance of moving to 7, a 1/3 chance of moving to 8, and a 1/3 chance of remaining at 6 (from rolling a 3). For j = 7, there is a 1/3 chance of moving to 8, and a 2/3 chance of remaining at 7 (from rolling a 2 or a 3). Once at 8, you remain there forever (the game is over).\r\nIf 5 is a forbidden square, the transition matrix becomes:\r\n0      1/3    1/3    1/3    0      0      0      0       \r\n0      1/3    1/3    1/3    0      0      0      0       \r\n0      0      1/3    1/3    0      1/3    0      0       \r\n0      0      0      1/3    0      1/3    1/3    0       \r\n0      0      0      0      0      0      0      0       \r\n0      0      0      0      0      1/3    1/3    1/3     \r\n0      0      0      0      0      0      2/3    1/3     \r\n0      0      0      0      0      0      0      1 \r\nNow for j = 2, 3, or 4, there is a 1/3 chance of staying put (by rolling a 3, 2, or 1, respectively). T(:,5) = 0 because there is no way to get to square 5. T(5,:) = 0 because there is no way to come from square 5.\r\n\r\nAlgorithm\r\nOne way to build T is to follow this procedure (example with n = 7, m = 4, nogo = [2 5]):\r\n1. Start with a matrix of zeros with 1/m on each of the m superdiagonals (to account for regular movement):\r\n0      1/4    1/4    1/4    1/4    0      0       \r\n0      0      1/4    1/4    1/4    1/4    0       \r\n0      0      0      1/4    1/4    1/4    1/4     \r\n0      0      0      0      1/4    1/4    1/4     \r\n0      0      0      0      0      1/4    1/4     \r\n0      0      0      0      0      0      1/4     \r\n0      0      0      0      0      0      0 \r\n2. Add (1:m)/m to the last m elements of the main diagonal (to account for staying put unless you land exactly on the final square):\r\n0      1/4    1/4    1/4    1/4    0      0       \r\n0      0      1/4    1/4    1/4    1/4    0       \r\n0      0      0      1/4    1/4    1/4    1/4     \r\n0      0      0      1/4    1/4    1/4    1/4     \r\n0      0      0      0      1/2    1/4    1/4     \r\n0      0      0      0      0      3/4    1/4     \r\n0      0      0      0      0      0      1       \r\n3. For each forbidden square j, add the values of the jth column to the main diagonal (to account for staying put if you would have landed on a forbidden square); replace the entire jth column and jth row with zeros (to account to never being able to land on or come from a forbidden square):\r\n1/2    0      1/4    1/4    0      0      0       \r\n0      0      0      0      0      0      0       \r\n0      0      1/4    1/4    0      1/4    1/4     \r\n0      0      0      1/2    0      1/4    1/4     \r\n0      0      0      0      0      0      0       \r\n0      0      0      0      0      3/4    1/4     \r\n0      0      0      0      0      0      1\r\n\r\nAssumptions\r\nEven King Neduchadneddar would be bored rolling a 1-sided die, so m ≥ 2. To ensure games last more than a single turn, n \u003e m. To avoid the game being impossible to play, the court astrologers always ensure that the king's unlucky numbers for the day are within the range 2 to (n-1), and that there aren't too many of them. Every so often, the king is feeling particularly lucky, which means the list of forbidden squares will be given as an empty array.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 1801.19px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 408px 900.588px; transform-origin: 408px 900.594px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBored of tedious court assemblies, King \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeduchadneddar\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e the Procrastinator has found a cunning way to keep his advisors, councilors, viziers, and other courtly lackeys busy: he plays a simple and pointless board game with them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlayers move their pawn along a path of \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e squares, starting at square 1, with the goal of being the first to reach square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. On each turn, they roll an \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e-sided die to determine how many squares to move. However, if their move would take them beyond the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e square, they stay put. Also, players cannot land on any of the numbers that King \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeduchadneddar\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e has decided are the unlucky numbers of the day. If their move would land them on any of these squares, they stay put instead.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTo keep his courtiers on their toes (so they have less time to plot his downfall), the king changes the number of squares (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e), the number of sides of the die (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e), and the list of unlucky forbidden squares each day.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeeding to know how much time he will waste with each game, the king in his wisdom (and/or insanity) has appointed you Chief Royal Mage of Matrix Computations and tasked you with determining the average number of moves it will take a player to complete a game according to today’s setup.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYour first task to achieve this important goal is to build the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003etransition matrix\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e for the game, given \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003enogo\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e (a vector of the forbidden numbers). The transition matrix \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eT\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is an \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e-by-\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e matrix where T(\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ek\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) is the probability of moving from square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ek\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e in one move.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 8 and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 3, with no forbidden squares the transition matrix would be:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.5px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 81.75px; transform-origin: 405px 81.75px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/3    1/3    1/3    0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/3    1/3    1/3    0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/3    1/3    1/3    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      1/3    1/3    1/3    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/3    1/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/3    1/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      2/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0      1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGenerally, from square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e there is a 1/3 chance of moving to \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e+1, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e+2, or \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e+3. However, for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 6, there is a 1/3 chance of moving to 7, a 1/3 chance of moving to 8, and a 1/3 chance of remaining at 6 (from rolling a 3). For \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 7, there is a 1/3 chance of moving to 8, and a 2/3 chance of remaining at 7 (from rolling a 2 or a 3). Once at 8, you remain there forever (the game is over).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf 5 is a forbidden square, the transition matrix becomes:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.5px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 81.75px; transform-origin: 405px 81.75px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/3    1/3    1/3    0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/3    1/3    1/3    0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/3    1/3    0      1/3    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/3    0      1/3    1/3    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/3    1/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      2/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0      1 \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNow for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 2, 3, or 4, there is a 1/3 chance of staying put (by rolling a 3, 2, or 1, respectively). \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eT(:,5)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 0 because there is no way to \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eget to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e square 5. \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eT(5,:)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 0 because there is no way to \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003ecome from\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e square 5.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAlgorithm\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eOne way to build \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eT\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is to follow this procedure (example with \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 7, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 4, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003enogo = [2 5]\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1. Start with a matrix of zeros with \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003e1/m\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e on each of the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e superdiagonals (to account for regular movement):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.062px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 71.525px; transform-origin: 405px 71.5312px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/4    1/4    1/4    1/4    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/4    1/4    1/4    1/4    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/4    1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0 \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e2. Add \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003e(1:m)/m\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to the last \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e elements of the main diagonal (to account for staying put unless you land exactly on the final square):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.062px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 71.525px; transform-origin: 405px 71.5312px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/4    1/4    1/4    1/4    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/4    1/4    1/4    1/4    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/4    1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/4    1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      1/2    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      3/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      1       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e3. For each forbidden square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, add the values of the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e column to the main diagonal (to account for staying put if you would have landed on a forbidden square); replace the entire \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e column and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e row with zeros (to account to never being able to land on or come from a forbidden square):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.062px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 71.525px; transform-origin: 405px 71.5312px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e1/2    0      1/4    1/4    0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/4    1/4    0      1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/2    0      1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      3/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAssumptions\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEven King \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeduchadneddar\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e would be bored rolling a 1-sided die, so \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e ≥ 2. To ensure games last more than a single turn, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. To avoid the game being impossible to play, the court astrologers always ensure that the king's unlucky numbers for the day are within the range 2 to (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e-1), and that there aren't too many of them. Every so often, the king is feeling particularly lucky, which means the list of forbidden squares will be given as an empty array.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function T = transition(n,m,nogo)\r\nT = ones(n)/m;\r\nend","test_suite":"%% Test case #1: m = 3, n = 21\r\nnogo = [6 9 14 16 17];\r\nidx = [22;43;44;45;64;65;66;67;86;87;88;89;130;131;133;152;154;155;196;197;218;220;221;241;242;243;262;263;264;265;306;307;309;372;396;397;417;418;419;438;439;440;441];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;2;1;1;1;1;1;2;1;1;1;3];\r\nTsoln = zeros(21);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(21,3,nogo);\r\nerr = abs((Tsoln/3) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #2: m = 3, n = 27\r\nnogo = 23;\r\nidx = [28;55;56;82;83;84;110;111;112;138;139;140;166;167;168;194;195;196;222;223;224;250;251;252;278;279;280;306;307;308;334;335;336;362;363;364;390;391;392;418;419;420;446;447;448;474;475;476;502;503;504;530;531;532;533;558;559;560;561;586;587;588;589;642;643;670;672;673;699;700;701;726;727;728;729];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;3];\r\nTsoln = zeros(27);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(27,3,nogo);\r\nerr = abs((Tsoln/3) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #3: m = 4, n = 15\r\nnogo = [10 12];\r\nidx = [16;31;32;46;47;48;61;62;63;64;77;78;79;80;81;93;94;95;96;97;109;110;111;112;113;125;126;127;128;129;157;158;159;161;189;191;193;206;208;209;221;223;224;225];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;2;1;1;1;1;1;1;2;1;1;3;1;1;1;4];\r\nTsoln = zeros(15);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(15,4,nogo);\r\nerr = abs((Tsoln/4) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #4: m = 4, n = 8\r\nnogo = [2 3 5];\r\nidx = [1;25;28;44;46;52;54;55;60;62;63;64];\r\nTvals = [3;1;1;1;2;1;1;3;1;1;1;4];\r\nTsoln = zeros(8);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(8,4,nogo);\r\nerr = abs((Tsoln/4) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #5: m = 5, n = 16\r\nnogo = [4 6 10 11 15];\r\nidx = [1;17;18;33;34;35;65;66;67;69;98;99;101;103;115;117;119;120;133;135;136;137;183;184;185;188;200;201;204;205;217;220;221;222;252;253;254;256];\r\nTvals = [2;1;2;1;1;2;1;1;1;2;1;1;1;2;1;1;1;2;1;1;1;2;1;1;1;2;1;1;1;3;1;1;1;4;1;1;1;5];\r\nTsoln = zeros(16);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(16,5,nogo);\r\nerr = abs((Tsoln/5) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #6: m = 5, n = 19\r\nnogo = 14;\r\nidx = [20;39;40;58;59;60;77;78;79;80;96;97;98;99;100;116;117;118;119;120;136;137;138;139;140;156;157;158;159;160;161;176;177;178;179;180;181;196;197;198;199;200;201;216;217;218;219;220;221;236;237;238;239;240;241;276;277;278;279;281;296;297;298;300;301;316;317;319;320;321;336;338;339;340;341;357;358;359;360;361];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;3;1;1;1;1;4;1;1;1;1;5];\r\nTsoln = zeros(19);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(19,5,nogo);\r\nerr = abs((Tsoln/5) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #7: m = 6, n = 9\r\nnogo = [3 6 7];\r\nidx = [1;10;11;28;29;31;37;38;40;41;65;67;68;71;76;77;80;81];\r\nTvals = [3;1;3;1;1;3;1;1;1;4;1;1;1;5;1;1;1;6];\r\nTsoln = zeros(9);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(9,6,nogo);\r\nerr = abs((Tsoln/6) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #8: m = 6, n = 11\r\nnogo = [5 9 10];\r\nidx = [1;12;13;23;24;25;34;35;36;37;56;57;58;59;61;67;68;69;70;72;73;79;80;81;83;84;85;116;117;118;121];\r\nTvals = [1;1;1;1;1;2;1;1;1;3;1;1;1;1;3;1;1;1;1;1;4;1;1;1;1;1;5;1;1;1;6];\r\nTsoln = zeros(11);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(11,6,nogo);\r\nerr = abs((Tsoln/6) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #9: m = 7, n = 8\r\nnogo = [2 5 7];\r\nidx = [1;17;19;25;27;28;41;43;44;46;57;59;60;62;64];\r\nTvals = [3;1;4;1;1;5;1;1;1;6;1;1;1;1;7];\r\nTsoln = zeros(8);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(8,7,nogo);\r\nerr = abs((Tsoln/7) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #10: m = 7, n = 24\r\nnogo = 5;\r\nidx = [1;25;26;49;50;51;73;74;75;76;121;122;123;124;145;146;147;148;150;169;170;171;172;174;175;194;195;196;198;199;200;219;220;222;223;224;225;244;246;247;248;249;250;270;271;272;273;274;275;294;295;296;297;298;299;300;319;320;321;322;323;324;325;344;345;346;347;348;349;350;369;370;371;372;373;374;375;394;395;396;397;398;399;400;419;420;421;422;423;424;425;426;444;445;446;447;448;449;450;451;469;470;471;472;473;474;475;476;494;495;496;497;498;499;500;501;519;520;521;522;523;524;525;526;544;545;546;547;548;549;550;551;569;570;571;572;573;574;575;576];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;7];\r\nTsoln = zeros(24);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(24,7,nogo);\r\nerr = abs((Tsoln/7) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #11: m = 8, n = 13\r\nnogo = [];\r\nidx = [14;27;28;40;41;42;53;54;55;56;66;67;68;69;70;71;79;80;81;82;83;84;85;92;93;94;95;96;97;98;99;105;106;107;108;109;110;111;112;113;119;120;121;122;123;124;125;126;127;133;134;135;136;137;138;139;140;141;147;148;149;150;151;152;153;154;155;161;162;163;164;165;166;167;168;169];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;8];\r\nTsoln = zeros(13);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(13,8,nogo);\r\nerr = abs((Tsoln/8) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #12: m = 8, n = 11\r\nnogo = [2 3 6 9];\r\nidx = [1;34;37;45;48;49;67;70;71;73;78;81;82;84;85;103;104;106;107;109;114;115;117;118;120;121];\r\nTvals = [4;1;3;1;1;4;1;1;1;5;1;1;1;1;6;1;1;1;1;7;1;1;1;1;1;8];\r\nTsoln = zeros(11);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(11,8,nogo);\r\nerr = abs((Tsoln/8) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #13: m = 9, n = 25\r\nnogo = [];\r\nidx = [26;51;52;76;77;78;101;102;103;104;126;127;128;129;130;151;152;153;154;155;156;176;177;178;179;180;181;182;201;202;203;204;205;206;207;208;226;227;228;229;230;231;232;233;234;252;253;254;255;256;257;258;259;260;278;279;280;281;282;283;284;285;286;304;305;306;307;308;309;310;311;312;330;331;332;333;334;335;336;337;338;356;357;358;359;360;361;362;363;364;382;383;384;385;386;387;388;389;390;408;409;410;411;412;413;414;415;416;417;434;435;436;437;438;439;440;441;442;443;460;461;462;463;464;465;466;467;468;469;486;487;488;489;490;491;492;493;494;495;512;513;514;515;516;517;518;519;520;521;538;539;540;541;542;543;544;545;546;547;564;565;566;567;568;569;570;571;572;573;590;591;592;593;594;595;596;597;598;599;616;617;618;619;620;621;622;623;624;625];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;9];\r\nTsoln = zeros(25);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(25,9,nogo);\r\nerr = abs((Tsoln/9) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #14: m = 9, n = 22\r\nnogo = [9 12 14 18];\r\nidx = [1;23;24;45;46;47;67;68;69;70;89;90;91;92;93;111;112;113;114;115;116;133;134;135;136;137;138;139;155;156;157;158;159;160;161;162;199;200;201;202;203;204;205;206;208;222;223;224;225;226;227;228;230;231;268;269;270;271;272;274;275;277;314;315;316;318;319;321;323;337;338;340;341;343;345;346;360;362;363;365;367;368;369;406;407;409;411;412;413;415;429;431;433;434;435;437;438;453;455;456;457;459;460;461;475;477;478;479;481;482;483;484];\r\nTvals = [1;1;1;1;1;2;1;1;1;2;1;1;1;1;3;1;1;1;1;1;3;1;1;1;1;1;1;3;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;2;1;1;1;1;1;1;3;1;1;1;1;1;1;4;1;1;1;1;1;1;5;1;1;1;1;1;1;6;1;1;1;1;1;1;7;1;1;1;1;1;1;8;1;1;1;1;1;1;1;9];\r\nTsoln = zeros(22);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(22,9,nogo);\r\nerr = abs((Tsoln/9) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #15: m = 10, n = 20\r\nnogo = [3 7];\r\nidx = [1;21;22;61;62;64;81;82;84;85;101;102;104;105;106;141;142;144;145;146;161;162;164;165;166;168;181;182;184;185;186;188;189;201;202;204;205;206;208;209;210;211;222;224;225;226;228;229;230;231;232;244;245;246;248;249;250;251;252;253;264;265;266;268;269;270;271;272;273;274;285;286;288;289;290;291;292;293;294;295;306;308;309;310;311;312;313;314;315;316;328;329;330;331;332;333;334;335;336;337;348;349;350;351;352;353;354;355;356;357;358;369;370;371;372;373;374;375;376;377;378;379;390;391;392;393;394;395;396;397;398;399;400];\r\nTvals = [2;1;2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;10];\r\nTsoln = zeros(20);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(20,10,nogo);\r\nerr = abs((Tsoln/10) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #16: m = 10, n = 14\r\nnogo = [2 3 8 13];\r\nidx = [1;43;46;57;60;61;71;74;75;76;85;88;89;90;91;113;116;117;118;119;121;127;130;131;132;133;135;136;141;144;145;146;147;149;150;151;158;159;160;161;163;164;165;166;186;187;188;189;191;192;193;194;196];\r\nTvals = [3;1;2;1;1;3;1;1;1;4;1;1;1;1;5;1;1;1;1;1;6;1;1;1;1;1;1;7;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;10];\r\nTsoln = zeros(14);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(14,10,nogo);\r\nerr = abs((Tsoln/10) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #17: m = 11, n = 19\r\nnogo = [5 7 13];\r\nidx = [1;20;21;39;40;41;58;59;60;61;96;97;98;99;101;134;135;136;137;139;141;153;154;155;156;158;160;161;172;173;174;175;177;179;180;181;191;192;193;194;196;198;199;200;201;210;211;212;213;215;217;218;219;220;221;250;251;253;255;256;257;258;259;261;270;272;274;275;276;277;278;280;281;291;293;294;295;296;297;299;300;301;310;312;313;314;315;316;318;319;320;321;331;332;333;334;335;337;338;339;340;341;350;351;352;353;354;356;357;358;359;360;361];\r\nTvals = [2;1;3;1;1;3;1;1;1;3;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;11];\r\nTsoln = zeros(19);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(19,11,nogo);\r\nerr = abs((Tsoln/11) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #18: m = 11, n = 15\r\nnogo = [2 4];\r\nidx = [1;31;33;61;63;65;76;78;80;81;91;93;95;96;97;106;108;110;111;112;113;121;123;125;126;127;128;129;136;138;140;141;142;143;144;145;151;153;155;156;157;158;159;160;161;166;168;170;171;172;173;174;175;176;177;183;185;186;187;188;189;190;191;192;193;198;200;201;202;203;204;205;206;207;208;209;215;216;217;218;219;220;221;222;223;224;225];\r\nTvals = [2;1;1;1;1;1;1;1;1;2;1;1;1;1;3;1;1;1;1;1;4;1;1;1;1;1;1;5;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;11];\r\nTsoln = zeros(15);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(15,11,nogo);\r\nerr = abs((Tsoln/11) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #19: m = 12, n = 25\r\nnogo = [];\r\nidx = [26;51;52;76;77;78;101;102;103;104;126;127;128;129;130;151;152;153;154;155;156;176;177;178;179;180;181;182;201;202;203;204;205;206;207;208;226;227;228;229;230;231;232;233;234;251;252;253;254;255;256;257;258;259;260;276;277;278;279;280;281;282;283;284;285;286;301;302;303;304;305;306;307;308;309;310;311;312;327;328;329;330;331;332;333;334;335;336;337;338;339;353;354;355;356;357;358;359;360;361;362;363;364;365;379;380;381;382;383;384;385;386;387;388;389;390;391;405;406;407;408;409;410;411;412;413;414;415;416;417;431;432;433;434;435;436;437;438;439;440;441;442;443;457;458;459;460;461;462;463;464;465;466;467;468;469;483;484;485;486;487;488;489;490;491;492;493;494;495;509;510;511;512;513;514;515;516;517;518;519;520;521;535;536;537;538;539;540;541;542;543;544;545;546;547;561;562;563;564;565;566;567;568;569;570;571;572;573;587;588;589;590;591;592;593;594;595;596;597;598;599;613;614;615;616;617;618;619;620;621;622;623;624;625];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;1;1;11;1;1;1;1;1;1;1;1;1;1;1;1;12];\r\nTsoln = zeros(25);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(25,12,nogo);\r\nerr = abs((Tsoln/12) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #20: m = 12, n = 23\r\nnogo = [5 17 21];\r\nidx = [1;24;25;47;48;49;70;71;72;73;116;117;118;119;121;139;140;141;142;144;145;162;163;164;165;167;168;169;185;186;187;188;190;191;192;193;208;209;210;211;213;214;215;216;217;231;232;233;234;236;237;238;239;240;241;254;255;256;257;259;260;261;262;263;264;265;277;278;279;280;282;283;284;285;286;287;288;289;301;302;303;305;306;307;308;309;310;311;312;313;325;326;328;329;330;331;332;333;334;335;336;337;349;351;352;353;354;355;356;357;358;359;360;361;397;398;399;400;401;402;403;404;405;406;407;409;421;422;423;424;425;426;427;428;429;430;432;433;445;446;447;448;449;450;451;452;453;455;456;457;493;494;495;496;497;498;499;501;502;503;505;517;518;519;520;521;522;524;525;526;528;529];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;11;1;1;1;1;1;1;1;1;1;1;12];\r\nTsoln = zeros(23);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(23,12,nogo);\r\nerr = abs((Tsoln/12) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":287,"edited_by":287,"edited_at":"2025-11-10T02:21:03.000Z","deleted_by":null,"deleted_at":null,"solvers_count":91,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2025-11-04T20:40:10.000Z","updated_at":"2026-03-20T17:16:50.000Z","published_at":"2025-11-10T02:21:03.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBored of tedious court assemblies, King \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eNeduchadneddar\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e the Procrastinator has found a cunning way to keep his advisors, councilors, viziers, and other courtly lackeys busy: he plays a simple and pointless board game with them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayers move their pawn along a path of \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 squares, starting at square 1, with the goal of being the first to reach square \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. On each turn, they roll an \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-sided die to determine how many squares to move. However, if their move would take them beyond the \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e square, they stay put. Also, players cannot land on any of the numbers that King \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eNeduchadneddar\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e has decided are the unlucky numbers of the day. If their move would land them on any of these squares, they stay put instead.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo keep his courtiers on their toes (so they have less time to plot his downfall), the king changes the number of squares (\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), the number of sides of the die (\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 the list of unlucky forbidden squares each day.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNeeding to know how much time he will waste with each game, the king in his wisdom (and/or insanity) has appointed you Chief Royal Mage of Matrix Computations and tasked you with determining the average number of moves it will take a player to complete a game according to today’s setup.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour first task to achieve this important goal is to build the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etransition matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e for the game, given \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, \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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003enogo\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (a vector of the forbidden numbers). The transition matrix \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is an \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-by-\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 matrix where T(\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,\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) is the probability of moving from square \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 to square \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 in one 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf \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 = 8 and \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 = 3, with no forbidden squares the transition matrix would be:\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[0      1/3    1/3    1/3    0      0      0      0       \\n0      0      1/3    1/3    1/3    0      0      0       \\n0      0      0      1/3    1/3    1/3    0      0       \\n0      0      0      0      1/3    1/3    1/3    0       \\n0      0      0      0      0      1/3    1/3    1/3     \\n0      0      0      0      0      1/3    1/3    1/3     \\n0      0      0      0      0      0      2/3    1/3     \\n0      0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGenerally, from square \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 there is a 1/3 chance of moving to \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+1, \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+2, or \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+3. However, for \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 = 6, there is a 1/3 chance of moving to 7, a 1/3 chance of moving to 8, and a 1/3 chance of remaining at 6 (from rolling a 3). For \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 = 7, there is a 1/3 chance of moving to 8, and a 2/3 chance of remaining at 7 (from rolling a 2 or a 3). Once at 8, you remain there forever (the game is over).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf 5 is a forbidden square, the transition matrix becomes:\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[0      1/3    1/3    1/3    0      0      0      0       \\n0      1/3    1/3    1/3    0      0      0      0       \\n0      0      1/3    1/3    0      1/3    0      0       \\n0      0      0      1/3    0      1/3    1/3    0       \\n0      0      0      0      0      0      0      0       \\n0      0      0      0      0      1/3    1/3    1/3     \\n0      0      0      0      0      0      2/3    1/3     \\n0      0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNow for \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 = 2, 3, or 4, there is a 1/3 chance of staying put (by rolling a 3, 2, or 1, respectively). \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\u003eT(:,5)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e = 0 because there is no way to \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eget to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e square 5. \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\u003eT(5,:)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e = 0 because there is no way to \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ecome from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e square 5.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOne way to build \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is to follow this procedure (example with \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 = 7, \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 = 4, \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\u003enogo = [2 5]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e):\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1. Start with a matrix of zeros with \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\u003e1/m\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e on each of the \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 superdiagonals (to account for regular movement):\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[0      1/4    1/4    1/4    1/4    0      0       \\n0      0      1/4    1/4    1/4    1/4    0       \\n0      0      0      1/4    1/4    1/4    1/4     \\n0      0      0      0      1/4    1/4    1/4     \\n0      0      0      0      0      1/4    1/4     \\n0      0      0      0      0      0      1/4     \\n0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2. Add \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:m)/m\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e to the last \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 elements of the main diagonal (to account for staying put unless you land exactly on the final square):\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[0      1/4    1/4    1/4    1/4    0      0       \\n0      0      1/4    1/4    1/4    1/4    0       \\n0      0      0      1/4    1/4    1/4    1/4     \\n0      0      0      1/4    1/4    1/4    1/4     \\n0      0      0      0      1/2    1/4    1/4     \\n0      0      0      0      0      3/4    1/4     \\n0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3. For each forbidden square \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, add the values of the \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e column to the main diagonal (to account for staying put if you would have landed on a forbidden square); replace the entire \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e column and \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e row with zeros (to account to never being able to land on or come from a forbidden square):\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/2    0      1/4    1/4    0      0      0       \\n0      0      0      0      0      0      0       \\n0      0      1/4    1/4    0      1/4    1/4     \\n0      0      0      1/2    0      1/4    1/4     \\n0      0      0      0      0      0      0       \\n0      0      0      0      0      3/4    1/4     \\n0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAssumptions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEven King \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eNeduchadneddar\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e would be bored rolling a 1-sided die, so \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 ≥ 2. To ensure games last more than a single turn, \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 \u0026gt; \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. To avoid the game being impossible to play, the court astrologers always ensure that the king's unlucky numbers for the day are within the range 2 to (\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-1), and that there aren't too many of them. Every so often, the king is feeling particularly lucky, which means the list of forbidden squares will be given as an empty array.\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\"}]}"},{"id":44630,"title":"Guess the number I'm thinking of (Part 1)","description":"In this game you are competing against two other people to guess the number that I'm thinking of.\r\nI randomly choose an integer between one and ten (inclusive). I don't provide any clues about the number.\r\nYour first opponent tries to guess the number. They guess randomly.\r\nYour second opponent tries to guess the number. They also guess randomly.\r\nYou try to guess the number. But you guess strategically.\r\nThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number. This represents a \"win\".\r\nIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\". (It is a loss for the remaining contestant.) A draw is worth half as much as a win.\r\nEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector guessesOfOpponents). Moreover, each guess must be unique.\r\nIf everyone guessed randomly, each person should have an equal chance of winning.\r\nIt might seem that you're at a disadvantage, having the last opportunity to guess. But actually you have the advantage of extra knowledge.\r\nBy guessing strategically, you should be able to achieve a success rate of 45% or more, in which\r\nsuccess rate = (wins + draws/2) / games\r\n\r\nRELATED PROBLEM:  \r\nProblem 52323. Guess the number I'm thinking of (Part 2)","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 484px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 242px; transform-origin: 407px 242px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003col style=\"block-size: 160px; font-family: Helvetica, Arial, sans-serif; list-style-type: decimal; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 80px; transform-origin: 391px 80px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eI randomly choose an\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003einteger\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e between\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eone\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eten\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e (inclusive). I don't provide any clues about the number.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour first opponent tries to guess the number. They guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour second opponent tries to guess the number. They also guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYou try to guess the number. But you guess\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estrategically\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number. This represents a \"win\".\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\". (It is a loss for the remaining contestant.) A draw is worth half as much as a win.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eguessesOfOpponents\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e). Moreover, each guess must be unique.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess. But actually you have the advantage of extra knowledge.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eBy guessing strategically, you should be able to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eachieve a success rate of 45% or more\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, in which\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003esuccess rate = (wins + draws/2) / games\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eRELATED PROBLEM:  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 10px; transform-origin: 391px 10px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52323\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 52323. Guess the number I'm thinking of (Part 2)\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = myGuess(guessesOfOpponents)\r\n    y = 42;\r\nend","test_suite":"%% Anti-hacking test\r\nassessFunctionAbsence({'rng', 'RandStream'}, 'FileName','myGuess.m')\r\n\r\n%% Ensure unique guesses of integers, which are in-range\r\nfor j = 1 : 1000\r\n    numberToBeGuessed = randi(10);\r\n    gOO = randperm(10, 2);\r\n    mG = myGuess(gOO);\r\n    assert( mG \u003e= 1  \u0026  mG \u003c= 10 , 'Out of requested range.' )\r\n    u = unique( floor([gOO mG]) );\r\n    assert( length(u) == 3 , 'Your guess must not have been already chosen.' )\r\nend;\r\n\r\n%% maxIts: 20000 = Too small; 30000 = Not quite big enough; 35000 = Just big enough (usually!); 50000 = Big enough (usually!); 100000 = Big enough, plus safety margin \u0026 efficiency incentive (but waste of resources)\r\nmaxIts = 100000;    \r\ntic\r\nfor j = 1 : 10\r\n    WDL = [0 0 0];\r\n    for itn = 1 : maxIts\r\n        numberToBeGuessed = randi(10);\r\n        gOO = randperm(10, 2);\r\n        diffs = abs( [gOO myGuess(gOO)] - numberToBeGuessed );\r\n        winningContestant = find( min(diffs)==diffs );\r\n        if any( winningContestant == 3 ),\r\n            if length(winningContestant) == 1,\r\n                % Win\r\n                WDL(1) = WDL(1) + 1;  \r\n            else\r\n                % Draw\r\n                WDL(2) = WDL(2) + 1;  \r\n            end;\r\n        else\r\n            % Loss\r\n            WDL(3) = WDL(3) + 1;  \r\n        end;\r\n    end;\r\n    successRate = (WDL(1) + WDL(2)/2) / maxIts\r\n    assert( successRate \u003e= 0.45 )\r\nend;\r\ntoc","published":true,"deleted":false,"likes_count":13,"comments_count":6,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":69,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-04T14:00:17.000Z","updated_at":"2026-02-06T20:26:39.000Z","published_at":"2018-05-05T12:29:22.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eI randomly choose 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003einteger\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e between\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\u003eone\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eten\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (inclusive). I don't provide any clues about the number.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour first opponent tries to guess the number. They guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour second opponent tries to guess the number. They also guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou try to guess the number. But you guess\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\u003estrategically\u003c/w:t\u003e\u003c/w:r\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number. This represents a \\\"win\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \\\"draw\\\". (It is a loss for the remaining contestant.) A draw is worth half as much as a win.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\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\u003eguessesOfOpponents\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e). Moreover, each guess must be unique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess. But actually you have the advantage of extra knowledge.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBy guessing strategically, you should be able to\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\u003eachieve a success rate of 45% or more\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, in which\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003esuccess rate = (wins + draws/2) / games\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRELATED PROBLEM:  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52323\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 52323. Guess the number I'm thinking of (Part 2)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\"}]}"},{"id":44647,"title":"Win all the time! ","description":"This is a 2-players game. One of them is your algorithm. Your algorithm must win in all games. \r\n\r\nIn this game there are 3 rows and every row has some lines like this:\r\n\r\n  1) ||||||||||\r\n  2) ||||||||\r\n  3) |||||\r\n\r\nYou can choose a row and remove some lines from the row. \r\n\r\nRule 1: You should remove the lines only in one row. \r\n\r\nRule 2: In your turn, you should remove at least one line.  \r\n\r\nAs input you have row info like this:\r\n\r\n  [4,5,6]\r\n\r\nIt means there are 4 lines in row1, 5 lines in row2 and 6 lines in row3. \r\n\r\nYou should return 2 numbers as output that one of them is row number and other is number of lines you want to remove from the row. \r\n\r\nThis function repeated to remove all the lines. If you remove the last line, you lose. So you should force your competitor to take the last line. \r\n\r\nAt the start it's your turn and input is [10,10,10].\r\n\r\nGood luck!","description_html":"\u003cp\u003eThis is a 2-players game. One of them is your algorithm. Your algorithm must win in all games.\u003c/p\u003e\u003cp\u003eIn this game there are 3 rows and every row has some lines like this:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) ||||||||||\r\n2) ||||||||\r\n3) |||||\r\n\u003c/pre\u003e\u003cp\u003eYou can choose a row and remove some lines from the row.\u003c/p\u003e\u003cp\u003eRule 1: You should remove the lines only in one row.\u003c/p\u003e\u003cp\u003eRule 2: In your turn, you should remove at least one line.\u003c/p\u003e\u003cp\u003eAs input you have row info like this:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[4,5,6]\r\n\u003c/pre\u003e\u003cp\u003eIt means there are 4 lines in row1, 5 lines in row2 and 6 lines in row3.\u003c/p\u003e\u003cp\u003eYou should return 2 numbers as output that one of them is row number and other is number of lines you want to remove from the row.\u003c/p\u003e\u003cp\u003eThis function repeated to remove all the lines. If you remove the last line, you lose. So you should force your competitor to take the last line.\u003c/p\u003e\u003cp\u003eAt the start it's your turn and input is [10,10,10].\u003c/p\u003e\u003cp\u003eGood luck!\u003c/p\u003e","function_template":"function [Row_number, Num_of_lines] = remove_lines(status)\r\n  Row_number=1;\r\n  Num_of_lines=3;\r\n  % Note that: Num_of_lines ≤ status(Row_number) and 1 ≤ Row_number ≤ 3\r\nend","test_suite":"%%\r\nfor i=1:1000\r\n    status=[10,10,10];\r\n    while sum(status)~=0\r\n        [Row_number, Num_of_lines] = remove_lines(status);\r\n        if Num_of_lines\u003estatus(Row_number)\r\n            disp('Error: Check number of lines');\r\n            result=false;\r\n            break;\r\n        end\r\n        if Num_of_lines\u003c1\r\n            disp('Error: You must remove at least one line');\r\n            result=false;\r\n            break;\r\n        end\r\n        if Row_number~=1 \u0026\u0026 Row_number~=2 \u0026\u0026 Row_number~=3\r\n            disp('Error: Row number must be 1, 2 or 3.');\r\n            result=false;\r\n            break;\r\n        end\r\n        if numel(Row_number)~=1 || numel(Num_of_lines)~=1\r\n           disp('Error: Row number must have one element');\r\n           result=false;\r\n            break;\r\n        end\r\n        status(Row_number)=status(Row_number)-Num_of_lines;\r\n        if sum(status)==0\r\n            disp('You lose');\r\n            result=false;\r\n            break;\r\n        end\r\n        if sum(status)==1\r\n            disp('You win');\r\n            result=true;\r\n            break;\r\n        end\r\n        [~,L]=max(status);\r\n        status(L)=status(L)-randi(status(L));\r\n        if sum(status)==0\r\n            disp('You win');\r\n            result=true;\r\n            break;\r\n        end \r\n    end\r\n    res(i)=result;\r\nend\r\nnumber_of_wins= sum(res)\r\nassert(isequal(sum(res),1000))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":2,"created_by":218677,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":19,"test_suite_updated_at":"2018-05-24T22:35:14.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-20T21:17:10.000Z","updated_at":"2025-12-04T11:51:22.000Z","published_at":"2018-05-20T22:09:13.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is a 2-players game. One of them is your algorithm. Your algorithm must win in all games.\u003c/w:t\u003e\u003c/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 this game there are 3 rows and every row has some lines like this:\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) ||||||||||\\n2) ||||||||\\n3) |||||]]\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\u003eYou can choose a row and remove some lines from the row.\u003c/w:t\u003e\u003c/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\u003eRule 1: You should remove the lines only in one row.\u003c/w:t\u003e\u003c/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\u003eRule 2: In your turn, you should remove at least one line.\u003c/w:t\u003e\u003c/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\u003eAs input you have row info like this:\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[[4,5,6]]]\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\u003eIt means there are 4 lines in row1, 5 lines in row2 and 6 lines in row3.\u003c/w:t\u003e\u003c/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 should return 2 numbers as output that one of them is row number and other is number of lines you want to remove from the row.\u003c/w:t\u003e\u003c/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\u003eThis function repeated to remove all the lines. If you remove the last line, you lose. So you should force your competitor to take the last line.\u003c/w:t\u003e\u003c/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\u003eAt the start it's your turn and input is [10,10,10].\u003c/w:t\u003e\u003c/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\u003eGood luck!\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":931,"title":"Rubik's Mini-Cube: Solve Randomized Mini-Cube - Score : Moves","description":"The Challenge is to Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\r\n\r\nThe Performance metric is average number of moves for solving 500 cubes.\r\n\r\nA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice.  The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\r\n\r\n\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/minicube2.png\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/miniCube_Map24_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (rubik)\r\n  \r\n  rubik: row vector of size 24\r\n  (The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\r\n\r\n  Output: move_vec (Numeric of moves to solve)\r\n   move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2\r\n\r\n* Example:\r\n* If the cube was randomized by [1 9] UD', one solution is [3 7]  which are the complements in reverse order. \r\n* Scoring is average face moves for 500 cubes\r\n* Cube Moves X, Y, and Z do not constitute a move but are needed in the vector \r\n* A string to numeric value function is provided in the template\r\n* Verifications will be by executing your move vector against the provided Rubik and counting number of face moves.\r\n\r\nThe function rubik_rot_mini(mov,r) is provided in the template.\r\n\r\n\r\nThe Function Template Contains a 3D Cube Viewer and the first step in solving is at the bottom in a comment block.\r\n\r\n\r\n* \r\n* \u003chttp://kociemba.org/cube.htm Cube Theory: 20-moves Any Cube\u003e \r\n* \u003chttp://peter.stillhq.com/jasmine/rubikscubesolution.html General Cube Info and Middle Layer\u003e\r\n* \u003chttp://www.speedcubing.com/final_layer_print.html SpeedCube Bottom Sequences\u003e\r\n(Note: Mini-Cube can use the full cube moves and ignore edge effects)\r\n\r\n\r\nComing Soon: The Mini-Cube  (2x2x2): Full Random - Eleven or Less Moves","description_html":"\u003cp\u003eThe Challenge is to Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\u003c/p\u003e\u003cp\u003eThe Performance metric is average number of moves for solving 500 cubes.\u003c/p\u003e\u003cp\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\u003c/p\u003e\u003cp\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/p\u003e\u003cp\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice.  The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/minicube2.png\"\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/miniCube_Map24_200.png\"\u003e\u003cimg src=\"http://mathworks.com/matlabcentral/images/surf.gif\"\u003e\u003cpre class=\"language-matlab\"\u003eInput: (rubik)\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003erubik: row vector of size 24\r\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eOutput: move_vec (Numeric of moves to solve)\r\n move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2\r\n\u003c/pre\u003e\u003cul\u003e\u003cli\u003eExample:\u003c/li\u003e\u003cli\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7]  which are the complements in reverse order.\u003c/li\u003e\u003cli\u003eScoring is average face moves for 500 cubes\u003c/li\u003e\u003cli\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/li\u003e\u003cli\u003eA string to numeric value function is provided in the template\u003c/li\u003e\u003cli\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe function rubik_rot_mini(mov,r) is provided in the template.\u003c/p\u003e\u003cp\u003eThe Function Template Contains a 3D Cube Viewer and the first step in solving is at the bottom in a comment block.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://kociemba.org/cube.htm\"\u003eCube Theory: 20-moves Any Cube\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://peter.stillhq.com/jasmine/rubikscubesolution.html\"\u003eGeneral Cube Info and Middle Layer\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://www.speedcubing.com/final_layer_print.html\"\u003eSpeedCube Bottom Sequences\u003c/a\u003e\r\n(Note: Mini-Cube can use the full cube moves and ignore edge effects)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eComing Soon: The Mini-Cube  (2x2x2): Full Random - Eleven or Less Moves\u003c/p\u003e","function_template":"function solve_vec = rubik_solve_mini(r)\r\n% Expect Numeric representation of moves (1:27):\r\n% 1:27 are ufdlbr upfpdplpbprp u2f2d2l2b2r2 xyzxpypzpx2y2z2\r\n solve_vec=[]; \r\nend\r\n\r\nfunction r=rubik_rot_mini(mov,r)\r\n%mov is 1:27;  1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 \r\n%             19-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n%\r\n% r is a 24 element row vector\r\n% r output is a single row vector \r\n%\r\n% vector mov\r\n% r output is array of length(mov) x 24\r\n%\r\n% Perform Rubik Cube face rotations and cube rotations\r\n% L 1:4 U 5:8 F 9:12 D 13:16 B 17:20 R 21:24 \r\n% \r\npersistent vf\r\nif isempty(vf) %\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\nend\r\n\r\nr=r(vf(mov,:));\r\nend\r\n\r\n\r\nfunction move_vec=decode27_movestr_rev001(movestr)\r\n% Active character Inputs: UFDLBRXYZ, GQ are pre-processed\r\n% 1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 19-27 XYZX'Y'Z'X2Y2Z2\r\nmovestr=upper(movestr);\r\nmovestr=strrep(movestr,'''','P'); % simplify further searches\r\n\r\nmovestr=strrep(movestr,'UP',' 7 ');\r\nmovestr=strrep(movestr,'FP',' 8 ');\r\nmovestr=strrep(movestr,'DP',' 9 ');\r\nmovestr=strrep(movestr,'LP',' 10 ');\r\nmovestr=strrep(movestr,'BP',' 11 ');\r\nmovestr=strrep(movestr,'RP',' 12 ');\r\nmovestr=strrep(movestr,'U2',' 13 ');\r\nmovestr=strrep(movestr,'F2',' 14 ');\r\nmovestr=strrep(movestr,'D2',' 15 ');\r\nmovestr=strrep(movestr,'L2',' 16 ');\r\nmovestr=strrep(movestr,'B2',' 17 ');\r\nmovestr=strrep(movestr,'R2',' 18 ');\r\nmovestr=strrep(movestr,'U',' 1 ');\r\nmovestr=strrep(movestr,'F',' 2 ');\r\nmovestr=strrep(movestr,'D',' 3 ');\r\nmovestr=strrep(movestr,'L',' 4 ');\r\nmovestr=strrep(movestr,'B',' 5 ');\r\nmovestr=strrep(movestr,'R',' 6 ');\r\nmovestr=strrep(movestr,'XP',' 22 ');\r\nmovestr=strrep(movestr,'YP',' 23 ');\r\nmovestr=strrep(movestr,'ZP',' 24 ');\r\nmovestr=strrep(movestr,'X2',' 25 ');\r\nmovestr=strrep(movestr,'Y2',' 26 ');\r\nmovestr=strrep(movestr,'Z2',' 27 ');\r\nmovestr=strrep(movestr,'X',' 19 ');\r\nmovestr=strrep(movestr,'Y',' 20 ');\r\nmovestr=strrep(movestr,'Z',' 21 ');\r\n\r\nmove_vec=str2num(movestr);\r\n\r\nend % move_vec\r\n\r\n\r\n%{\r\n% 3D Viewer and Development Environment\r\n\r\n\r\nfunction RubikMini_3D_2724_Solver_viewer\r\n%Rubiks Mini-Cube Play\r\n%Creator: Richard Zapor\r\n% 09/01/12\r\nclear all\r\nglobal pmap plate zCmap r  % For 3D  viewer\r\n\r\n% initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n \r\n % Map 3D platelettes and surfaces\r\n [pmap plate]=cube_faces; % One time association of array to 3D surfaces\r\n  % zCmap=[0,0,0;1,1,1;0,0,1;1,1,0;1,0,0;0,1,0;1,.6,0]; \r\n  % 1-Blk,2-Wht,3-Blu,4-Yellow,5-Red,6-Green,7-Orange\r\n  \r\n  zCmap=[0,0,0;1,0,0;1,1,1;0,0,1;1,1,0;0,1,0;1,.6,0]; \r\n  % 1-Blk,2-Red,3-Wht,4-Blu,5-Yellow,6-Green,7-Orange\r\n\r\n% Initialize 3D figure\r\nfigure(2);set(gca,'CameraPosition',[6 -2 7]); % Initial 3D setup\r\n   axis ([-1 4 -1 4 -1 4]);\r\n   axis equal % This is slow but needed for free rotate 1.2 sec\r\n   axis off\r\nview3D % Calls subroutine that produces a 3D image in figure 2\r\n\r\n% r=rubik_rot2(r,mov)\r\n% mov is 1:27;  1-6 UFDLB 7-12 U'F;D'L'B' 13-18 U2F2D2L2B2 \r\n%             22-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n\r\nfprintf('Move Entry (UFDLBRXYZ) eg U U2 U'' (or Up) or G=GoReset P=Play Q-Quit  :\\n');\r\nwhile 1 % Infinite loop\r\n str1=input('Enter Move(s):','s');\r\n if isempty(str1),continue;end\r\n movestr1=regexp(upper(strtrim(str1)),'\\s*','split');\r\n if movestr1{1}=='P',break;end\r\n if movestr1{1}=='Q',return;end\r\n if movestr1{1}=='G'\r\n  r=rnorm;\r\n  view3D\r\n  continue;\r\n end\r\n \r\n move_vec=decode27_movestr_rev001(str1);\r\n \r\n for i=1:length(move_vec) \r\n  r=rubik_rot_mini(move_vec(i),r);\r\n end\r\n% view3D\r\n\r\n \r\nend % while move manipulation practice loop\r\n\r\n% Setup Cube and Play\r\n\r\nfprintf('\\n\\nSolve Multiple Cubes\\n')\r\nzcnt=0;\r\nsum_solve=0;\r\nmin_solve=1000;\r\nmax_solve=0;\r\ntic\r\nwhile 1 % Games loop\r\n    mix=40; % Very random cube\r\n    zcnt=zcnt+1;\r\n    if zcnt\u003e100,break;end\r\n% mix=input('\\n\\nHow many random face rotations? (0=Exit) : ');\r\n% if isempty(mix),continue;end\r\n\r\n r=rnorm;\r\n % Initial mix\r\n mov=randi(18,[mix,1]); % do one create movr=randi(18,zcnt,mix) mov=movr(zcnt,:)\r\n for i=1:length(mov) \r\n  if i\u003e1 % Eliminate move undos\r\n  % f2 f2 or f f'  or f' f\r\n   if (mov(i)\u003e12 \u0026\u0026 mov(i-1)==mov(i))||(mov(i-1)\u003c7 \u0026\u0026 mov(i)==mov(i-1)+6)||...\r\n       (mov(i-1)\u003e6  \u0026\u0026 mov(i)==mov(i-1)-6)    \r\n    mov(i)=mov(i)+1;   % 1:17 map to 2:18  18 map to 1\r\n    if mov(i)==19,mov(i)=1;end\r\n   end\r\n  end\r\n  r=rubik_rot_mini(mov(i),r);\r\n end\r\n \r\n r_reset=r;\r\n \r\n solve_vec=[];\r\n \r\n % Check cube for Good face and Edges\r\n % Place on Up; Solve Cross/Corners with u u' or u2\r\n % Assures single move i solved in 1 move, may solve at bottom solid face\r\n % check\r\n \r\n% Insert Solution Code Here\r\n \r\n % Orient Cube R-L W-U B-F  RWB\r\n % Sequence thru BWO OWG GWR  to Solve Top Corners\r\n % Flip Cube to Solve Bottom Layer\r\n % Apply SpeedCube Corner Rotate Algorithms if Bot not Solid or Solved\r\n % If not solved Apply SpeedCube Corner Rotate/Move Algorithms\r\n \r\n % Orient Cube using XYZ to be RWB 3-6-9 RL-WU-BF\r\n  movestr=solve_orient_str(r);\r\n  move_vec=decode27_movestr_rev001(movestr);\r\n   \r\n  move_vec=[move_vec 20]; % add a Y to get to next face\r\n  solve_vec=[solve_vec move_vec];\r\n  \r\n  for i=1:length(move_vec) \r\n   r=rubik_rot_mini(move_vec(i),r);\r\n  end\r\n % end Orient Start Cube\r\n \r\n  % Solve Top Corners\r\n  for corners=2:4 % Solve Top corners TLFC, First Corner Solved\r\n   movestr='';\r\n%   movestr=solve_corners_str(r); % Not provided\r\n   move_vec=decode27_movestr_rev001(movestr);\r\n   \r\n   move_vec=[move_vec 20]; % add a Y to get to next face\r\n   solve_vec=[solve_vec move_vec];\r\n   \r\n   for i=1:length(move_vec) \r\n    r=rubik_rot_mini(move_vec(i),r);\r\n   end\r\n  end % corners\r\n  \r\n  % Solve Bottom by flipping to Top and running SpeedCube Sequences\r\n  \r\n  % Position Bottom to Top\r\n  r=rubik_rot_mini(25,r); % x2\r\n  solve_vec=[solve_vec 25];\r\n  \r\n  solved=0;\r\n  % Function Check u-rotate/solve\r\n  % Is Bottom layer solveable? Needs only a u u' or u2\r\n  if all(r(5:8)==r(5)) \u0026\u0026 r(1)==r(3)  \u0026\u0026 r(9)==r(11) \u0026\u0026 ...\r\n     r(21)==r(23)  \u0026\u0026 r(20)==r(18)\r\n   %Appears to have a U rotate solution\r\n   f_edge_loc=find(r([9 21 20 1])==r(10),1,'first');\r\n   %if isempty(f_edge_loc),continue;end % Bottom not solved\r\n   %if f_edge_loc==1, do nothing;end it is in right location\r\n   if f_edge_loc==2\r\n    r=rubik_rot_mini(1,r);\r\n    solve_vec=[solve_vec 1];\r\n   end\r\n   if f_edge_loc==3\r\n    r=rubik_rot_mini(13,r);\r\n    solve_vec=[solve_vec 13];\r\n   end\r\n   if f_edge_loc==4\r\n    r=rubik_rot_mini(7,r);\r\n    solve_vec=[solve_vec 7];\r\n   end\r\n   solved=1;\r\n%fprintf('U Rotate Solve Success\\n')\r\n  end % Bottom layer rotate to solve\r\n  \r\n  if ~all(r(5:8)==r(5)) % Multiple top face invalid - Try Quick full solve\r\n    movestr='';\r\n%    [movestr solved]=full_solve_bottom_str(r); % Not provided\r\n    if solved\r\n% fprintf('H Quick Full Solve Success\\n')\r\n%      view3D\r\n     move_vec=decode27_movestr_rev001(movestr);\r\n     solve_vec=[solve_vec move_vec];\r\n     for i=1:length(move_vec) \r\n      r=rubik_rot_mini(move_vec(i),r);\r\n     end\r\n%      view3D\r\n    end % Solved\r\n  end\r\n   \r\n \r\n  if ~solved % Execute Full Speed Cube Two Tier Methods\r\n    movestr='';\r\n %    movestr=solve_bottom_str(r); % Not provided\r\n    move_vec=decode27_movestr_rev001(movestr);\r\n   \r\n    solve_vec=[solve_vec move_vec];\r\n   \r\n    for i=1:length(move_vec) \r\n     r=rubik_rot_mini(move_vec(i),r);\r\n    end\r\n  end\r\n  \r\n% Normal Cube Return Point\r\n  \r\n % Verify Solution and Generate Statistics\r\n  if all(r(1:4)==r(4)) \u0026\u0026 all(r(5:8)==r(8))  \u0026\u0026 all(r(9:12)==r(9)) \u0026\u0026 ...\r\n     all(r(13:16)==r(13))  \u0026\u0026 all(r(17:20)==r(17)) \u0026\u0026 all(r(21:24)==r(21))\r\n   solve_vec(solve_vec\u003e18)=[]; % \r\n   lsolve=length(solve_vec);\r\n   sum_solve=sum_solve+lsolve;\r\n   min_solve=min(min_solve,lsolve);\r\n   max_solve=max(max_solve,lsolve);\r\n   asolve=floor(sum_solve/zcnt);\r\n   fprintf('Cube Solved Moves=%i  Avg Moves=%i min=%i  max=%i\\n',lsolve,asolve,min_solve,max_solve)\r\n  else % Deug info\r\n   fprintf('\\n\\nCube NOT Solved???\\n\\n') \r\n   fprintf('%i ',r); % Current ending data\r\n   fprintf('\\n')\r\n   fprintf('%i ',r_reset); % Starting Cube\r\n   view3D \r\n   pause(1) % Big Long pause\r\n  end\r\n  \r\nend % Games Loop\r\ntoc\r\n\r\n%view3D % appearance of final cube\r\n\r\nfprintf('\\n\\nThank You for Playing\\n\\nPlease come again.\\n')\r\n\r\nend\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction  movestr=solve_orient_str(r)\r\n% % initialize cube\r\n%  r(1:4)=0;     %Left   0 R\r\n%  r(5:8)=1;     %Up     1 W\r\n%  r(9:12)=2;    %Front  2 B\r\n%  r(13:16)=3;   %Down   3 Y\r\n%  r(17:20)=4;   %Back   4 G\r\n%  r(21:24)=5;   %Right  5 O\r\npersistent m\r\nif isempty(m) % all moves leave possibly valid corners and cross alone\r\n    % w  r  b\r\n m={[ 6  3  9  ''];\r\n    [ 8 11 21  'y'];  \r\n    [ 7 23 20  'y2']; \r\n    [ 5 18  1  'yp'];\r\n    [10  4 13  'x'];\r\n    [14  2 17  'x2'];\r\n    [18  1  5  'xp'];\r\n    [ 4 13 10  'z'];\r\n    [15 22 12  'z2'];\r\n    [21  8 11  'zp'];\r\n    [12 15 22  'zx']; \r\n    [11 21  8  'z2x'];\r\n    [ 9  6  3  'zpx'];\r\n    [ 2 17 14  'ypx'];\r\n    [ 1  5 18  'x2z'];\r\n    [ 3  9  6  'xpz'];\r\n    [22 12 15  'yx'];\r\n    [23 20  7  'xpzp'];\r\n    [24 16 19  'x2zp'];\r\n    [20  7 23  'xpy'];\r\n    [17 14  2  'ypz'];\r\n    [19 24 16  'y2x'];\r\n    [13 10  4  'yx2']; \r\n    [16 19 24  'x2y']}; \r\nend\r\n u=1; % value of top\r\n L=0; % value of left face\r\n f=2; % value of front face\r\n for ptr=1:24\r\n  if r(abs(m{ptr}(1)))==u \u0026\u0026 r(abs(m{ptr}(2)))==L \u0026\u0026 r(abs(m{ptr}(3)))==f, break;end\r\n end\r\n \r\nmovestr=m{ptr}(4:end);\r\nend % solve orient\r\n\r\nfunction move_vec=decode27_movestr_rev001(movestr)\r\n% Active character Inputs: UFDLBRXYZ, GQ are pre-processed\r\n% 1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 19-27 XYZX'Y'Z'X2Y2Z2\r\nmovestr=upper(movestr);\r\nmovestr=strrep(movestr,'''','P'); % simplify further searches\r\n\r\nmovestr=strrep(movestr,'UP',' 7 ');\r\nmovestr=strrep(movestr,'FP',' 8 ');\r\nmovestr=strrep(movestr,'DP',' 9 ');\r\nmovestr=strrep(movestr,'LP',' 10 ');\r\nmovestr=strrep(movestr,'BP',' 11 ');\r\nmovestr=strrep(movestr,'RP',' 12 ');\r\nmovestr=strrep(movestr,'U2',' 13 ');\r\nmovestr=strrep(movestr,'F2',' 14 ');\r\nmovestr=strrep(movestr,'D2',' 15 ');\r\nmovestr=strrep(movestr,'L2',' 16 ');\r\nmovestr=strrep(movestr,'B2',' 17 ');\r\nmovestr=strrep(movestr,'R2',' 18 ');\r\nmovestr=strrep(movestr,'U',' 1 ');\r\nmovestr=strrep(movestr,'F',' 2 ');\r\nmovestr=strrep(movestr,'D',' 3 ');\r\nmovestr=strrep(movestr,'L',' 4 ');\r\nmovestr=strrep(movestr,'B',' 5 ');\r\nmovestr=strrep(movestr,'R',' 6 ');\r\nmovestr=strrep(movestr,'XP',' 22 ');\r\nmovestr=strrep(movestr,'YP',' 23 ');\r\nmovestr=strrep(movestr,'ZP',' 24 ');\r\nmovestr=strrep(movestr,'X2',' 25 ');\r\nmovestr=strrep(movestr,'Y2',' 26 ');\r\nmovestr=strrep(movestr,'Z2',' 27 ');\r\nmovestr=strrep(movestr,'X',' 19 ');\r\nmovestr=strrep(movestr,'Y',' 20 ');\r\nmovestr=strrep(movestr,'Z',' 21 ');\r\n\r\nmove_vec=str2num(movestr);\r\n\r\nend % move_vec\r\n\r\nfunction view3D\r\n global pmap plate zCmap r\r\n  hold on;\r\n  for i=1:24\r\n    idx=pmap(i);\r\n    fill3(plate(i,1:4),plate(i,5:8),plate(i,9:12),zCmap(r(idx)+2,:),'LineWidth',2)  \r\n  end\r\n  hold off\r\n\r\nend\r\n\r\nfunction [pmap plate]=cube_faces()\r\n%global pmap plate\r\n% Sequence that cube faces are filled   \r\n  pmap=[ 2  4     1  3          ...\r\n        10 12     9 11          ...\r\n        24 22    23 21          ...\r\n        17 19    18 20          ...\r\n         5  7     6  8          ...\r\n        14 16    13 15          ];\r\n plate=zeros(54,12);\r\n % Could optimize creation or load from mat\r\n % Four 3D corners x1 x2 x3 x4 y1 y2 y3 y4 z1 z2 z3 z4\r\n plate(1,:)=[0 1 1 0 0 0 0 0 0 0 1 1]; \r\n plate(2,:)=[1 2 2 1 0 0 0 0 0 0 1 1]; \r\n plate(3,:)=[0 1 1 0 0 0 0 0 1 1 2 2]; \r\n plate(4,:)=[1 2 2 1 0 0 0 0 1 1 2 2]; \r\n \r\n plate(5,:)=[2 2 2 2 0 1 1 0 0 0 1 1];\r\n plate(6,:)=[2 2 2 2 1 2 2 1 0 0 1 1];\r\n plate(7,:)=[2 2 2 2 0 1 1 0 1 1 2 2];\r\n plate(8,:)=[2 2 2 2 1 2 2 1 1 1 2 2];\r\n \r\n plate(9:12,:)=plate(1:4,:);\r\n plate(9:12,5:8)=repmat(2,4,4);\r\n \r\n plate(13:16,:)=plate(5:8,:);\r\n plate(13:16,1:4)=zeros(4,4); %repmat(0,4,4); \r\n \r\n plate(17,:)=[0 1 1 0 0 0 1 1 2 2 2 2]; \r\n plate(18,:)=[0 1 1 0 1 1 2 2 2 2 2 2]; \r\n plate(19,:)=[1 2 2 1 0 0 1 1 2 2 2 2]; \r\n plate(20,:)=[1 2 2 1 1 1 2 2 2 2 2 2];\r\n\r\n plate(21:24,:)=plate(17:20,:);\r\n plate(21:24,9:12)=zeros(4,4); %repmat(0,4,4);  %\r\n  \r\nend\r\n\r\nfunction r=rubik_rot_mini(mov,r)\r\n%mov is 1:27;  1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 \r\n%             19-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n%\r\n% r is a 24 element row vector\r\n% r output is a single row vector \r\n%\r\n% vector mov\r\n% r output is array of length(mov) x 24\r\n%\r\n% Perform Rubik Cube face rotations and cube rotations\r\n% L 1:4 U 5:8 F 9:12 D 13:16 B 17:20 R 21:24 \r\n% \r\npersistent vf\r\nif isempty(vf) %\r\nvf=[ 9  2  11  4  6   8   5   7 21  10   23  12 13  14  15  16 17   3   19   1 20  22   18  24 ; \r\n     1  2  13 15  5   4   7   3 10  12    9  11 22  14  21  16 17  18   19  20  6   8   23  24 ;\r\n     1 19   3 17  5   6   7   8  9   2   11   4 14  16  13  15 24  18   22  20 21  10   23  12 ;\r\n     2  4   1  3 17  18   7   8  5   6   11  12  9  10  15  16 13  14   19  20 21  22   23  24 ;\r\n     7  5   3  4 23   6  24   8  9  10   11  12 13   1  15   2 18  20   17  19 21  22   16  14 ;\r\n     1  2   3  4  5   6  11  12  9  10   15  16 13  14  19  20 17  18    7   8 22  24   21  23 ;\r\n    20  2  18  4  7   5   8   6  1  10    3  12 13  14  15  16 17  23   19  21  9  22   11  24 ;\r\n     1  2   8  6  5  21   7  22 11   9   12  10  3  14   4  16 17  18   19  20 15  13   23  24 ;\r\n     1 10   3 12  5   6   7   8  9  22   11  24 15  13  16  14  4  18    2  20 21  19   23  17 ;\r\n     3  1   4  2  9  10   7   8 13  14   11  12 17  18  15  16  5   6   19  20 21  22   23  24 ;\r\n    14 16   3  4  2   6   1   8  9  10   11  12 13  24  15  23 19  17   20  18 21  22    5   7 ;\r\n     1  2   3  4  5   6  19  20  9  10    7   8 13  14  11  12 17  18   15  16 23  21   24  22 ;\r\n    21  2  23  4  8   7   6   5 20  10   18  12 13  14  15  16 17  11   19   9  1  22    3  24 ;\r\n     1  2  22 21  5  15   7  13 12  11   10   9  8  14   6  16 17  18   19  20  4   3   23  24 ;\r\n     1 22   3 24  5   6   7   8  9  19   11  17 16  15  14  13 12  18   10  20 21   2   23   4 ;\r\n     4  3   2  1 13  14   7   8 17  18   11  12  5   6  15  16  9  10   19  20 21  22   23  24 ;\r\n    24 23   3  4 16   6  14   8  9  10   11  12 13   7  15   5 20  19   18  17 21  22    2   1 ;\r\n     1  2   3  4  5   6  15  16  9  10   19  20 13  14   7   8 17  18   11  12 24  23   22  21 ;\r\n     3  1   4  2  9  10  11  12 13  14   15  16 17  18  19  20  5   6    7   8 22  24   21  23 ;\r\n     9 10  11 12  6   8   5   7 21  22   23  24 15  13  16  14  4   3    2   1 20  19   18  17 ;\r\n    14 16  13 15  2   4   1   3 10  12    9  11 22  24  21  23 19  17   20  18  6   8    5   7 ;\r\n     2  4   1  3 17  18  19  20  5   6    7   8  9  10  11  12 13  14   15  16 23  21   24  22 ;\r\n    20 19  18 17  7   5   8   6  1   2    3   4 14  16  13  15 24  23   22  21  9  10   11  12 ;\r\n     7  5   8  6 23  21  24  22 11   9   12  10  3   1   4   2 18  20   17  19 15  13   16  14 ;\r\n     4  3   2  1 13  14  15  16 17  18   19  20  5   6   7   8  9  10   11  12 24  23   22  21 ;\r\n    21 22  23 24  8   7   6   5 20  19   18  17 16  15  14  13 12  11   10   9  1   2    3   4 ; \r\n    24 23  22 21 16  15  14  13 12  11   10   9  8   7   6   5 20  19   18  17  4   3    2   1 ];\r\nend\r\n\r\nr=r(vf(mov,:));\r\nend\r\n\r\n\r\n\r\n%}\r\n\r\n\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\n\r\n%r=r(vf(mov,:));  % Standard move, r=rubik_rot_min(mov,r);\r\n\r\nPass=1;\r\nr_fail=0;\r\n% Execute 500 cubes and verify completeness and count moves\r\n % initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n\r\nzcnt=0;\r\nsum_solve=0;\r\nmin_solve=1000;\r\nmax_solve=0;\r\nasolve=199;\r\nmix=40;\r\n\r\ntic\r\n\r\nwhile zcnt\u003c500\r\n zcnt=zcnt+1;\r\n  r=rnorm;\r\n % Initial mix\r\n mov=randi(18,[mix,1]);\r\n for i=1:length(mov)  % Ignoring Move Undos since mix=40\r\n  %r=rubik_rot(mov(i),r);\r\n   r=r(vf(mov(i),:));\r\n end\r\n\r\n r_reset=r; % Used in assert\r\n\r\n solve_vec=rubik_solve_mini(r);\r\n\r\n for i=1:length(solve_vec) \r\n  %r=rubik_rot(solve_vec(i),r);\r\n  r=r(vf(solve_vec(i),:));\r\n end\r\n\r\n  if all(r(1:4)==r(4)) \u0026\u0026 all(r(5:8)==r(8))  \u0026\u0026 all(r(9:12)==r(9)) \u0026\u0026 ...\r\n     all(r(13:16)==r(13))  \u0026\u0026 all(r(17:20)==r(17)) \u0026\u0026 all(r(21:24)==r(21))\r\n   solve_vec(solve_vec\u003e18)=[]; %   \r\n   lsolve=length(solve_vec);\r\n   sum_solve=sum_solve+lsolve;\r\n   min_solve=min(min_solve,lsolve);\r\n   max_solve=max(max_solve,lsolve);\r\n   asolve=floor(sum_solve/zcnt);\r\n %  fprintf('Cube Solved Moves=%i  Avg Moves=%i min=%i  max=%i\\n',lsolve,asolve,min_solve,max_solve)\r\n  else % Deug info\r\n   Pass=0;\r\n   r_fail=r_reset;\r\n  % fprintf('\\n\\nCube NOT Solved???\\n\\n') \r\n  % fprintf('%i ',r); % Current ending data\r\n  % fprintf('\\n')\r\n  % fprintf('%i ',r_reset); % Starting Cube\r\n  end\r\n\r\nend % while of cubes\r\ntoc\r\n\r\nassert(isequal(Pass,1),sprintf('%i ',r_fail)); % Output Non-Solved Cube Start\r\nif Pass\r\n feval(@assignin,'caller','score',min(100,floor(asolve)));\r\nend\r\n\r\nfprintf('Moves: Avg %i   Min %i   Max %i\\n',asolve,min_solve,max_solve)","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":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-04T03:44:49.000Z","updated_at":"2025-04-22T03:20:12.000Z","published_at":"2012-09-04T05:01: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\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image2.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image1.gif\"}],\"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 Challenge is to Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\u003c/w:t\u003e\u003c/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 Performance metric is average number of moves for solving 500 cubes.\u003c/w:t\u003e\u003c/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\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\u003c/w:t\u003e\u003c/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 faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/w:t\u003e\u003c/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\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice. The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/w:t\u003e\u003c/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: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=\\\"rId2\\\"/\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: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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (rubik)\\n\\nrubik: row vector of size 24\\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\\n\\nOutput: move_vec (Numeric of moves to solve)\\n move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7] which are the complements in reverse order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eScoring is average face moves for 500 cubes\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA string to numeric value function is provided in the template\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function rubik_rot_mini(mov,r) is provided in the template.\u003c/w:t\u003e\u003c/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 Function Template Contains a 3D Cube Viewer and the first step in solving is at the bottom in a comment block.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Theory: 20-moves Any Cube\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://peter.stillhq.com/jasmine/rubikscubesolution.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGeneral Cube Info and Middle Layer\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/final_layer_print.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpeedCube Bottom Sequences\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e(Note: Mini-Cube can use the full cube moves and ignore edge effects)\u003c/w:t\u003e\u003c/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\u003eComing Soon: The Mini-Cube (2x2x2): Full Random - Eleven or Less Moves\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.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"}]}"},{"id":702,"title":"Play Tic Tac Toe : No Losses Allowed","description":"Let's play a friendly game of Tic Tac Toe \r\n\r\nCreate an efficient algorithm to Never Lose.\r\n\r\nThe Player may be either the first or second to play.\r\n\r\nInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\r\n\r\nPlayer output is an integer 1:9 to identify array index position\r\n\r\n 1 4 7\r\n 2 5 8\r\n 3 6 9\r\n\r\nExample game play:\r\n\r\n Input:        [1 0 0; 0 0 0; 0 0 0]  % Computer playing first in this example\r\n Output:        5                     % Player return value\r\n Yields :      [1 0 0; 0 2 0; 0 0 0]  % Computer then picks position 2.\r\n Second Input: [1 0 0; 1 2 0; 0 0 0]  % Computer's second move shown.\r\n\r\nPassing score is never losing.\r\n\r\nThe contest engine is almost Random - about 4000 times. (\u003c12% of Time-Out)\r\n\r\nCreating the perfect tic-tac-toe engine seemed unnecessary.\r\n\r\nYour Wins/Losses/Draws will be shown.\r\n\r\nOn a loss the losing board will be shown\r\n\r\nFollow-up game will be WOPR:Global Thermonuclear War.","description_html":"\u003cp\u003eLet's play a friendly game of Tic Tac Toe\u003c/p\u003e\u003cp\u003eCreate an efficient algorithm to Never Lose.\u003c/p\u003e\u003cp\u003eThe Player may be either the first or second to play.\u003c/p\u003e\u003cp\u003eInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\u003c/p\u003e\u003cp\u003ePlayer output is an integer 1:9 to identify array index position\u003c/p\u003e\u003cpre\u003e 1 4 7\r\n 2 5 8\r\n 3 6 9\u003c/pre\u003e\u003cp\u003eExample game play:\u003c/p\u003e\u003cpre\u003e Input:        [1 0 0; 0 0 0; 0 0 0]  % Computer playing first in this example\r\n Output:        5                     % Player return value\r\n Yields :      [1 0 0; 0 2 0; 0 0 0]  % Computer then picks position 2.\r\n Second Input: [1 0 0; 1 2 0; 0 0 0]  % Computer's second move shown.\u003c/pre\u003e\u003cp\u003ePassing score is never losing.\u003c/p\u003e\u003cp\u003eThe contest engine is almost Random - about 4000 times. (\u0026lt;12% of Time-Out)\u003c/p\u003e\u003cp\u003eCreating the perfect tic-tac-toe engine seemed unnecessary.\u003c/p\u003e\u003cp\u003eYour Wins/Losses/Draws will be shown.\u003c/p\u003e\u003cp\u003eOn a loss the losing board will be shown\u003c/p\u003e\u003cp\u003eFollow-up game will be WOPR:Global Thermonuclear War.\u003c/p\u003e","function_template":"function p = tic_tac_toe(x)\r\n  p = 1;\r\nend","test_suite":"%%\r\n%Tic Tac Toe : Never Lose\r\ndraws=0;\r\nwins=0;\r\nPass=1;\r\nfor i=1:2000 % Computer First;  2001-4000 Player First\r\n if Pass==0,break;end\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n\r\n% Random unless Win presents itself\r\n  v0=find(x==0)';\r\n  t1=x;\r\n  t1(t1==2)=-2; % Player pips set to -2\r\n% Check for Win Option\r\n wc=find(sum(t1)==2); % column with a win\r\n if ~isempty(wc)\r\n  p=intersect((1:3)+3*(wc-1),v0);\r\n end\r\n wr=find(sum(t1,2)==2); % row with a win\r\n if ~isempty(wr)\r\n  p=intersect((1:3:7)+(wr-1),v0);\r\n end\r\n% Diagonal Win Options\r\nif x(5)==1\r\n if x(1)==1 \u0026\u0026 x(9)==0,p=9;end\r\n if x(9)==1 \u0026\u0026 x(1)==0,p=1;end\r\n if x(3)==1 \u0026\u0026 x(7)==0,p=7;end\r\n if x(7)==1 \u0026\u0026 x(3)==0,p=3;end\r\nend\r\n% end of Win check\r\n   \r\n   \r\n   \r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win % Computer Wins on its move : Match Over\r\n   Pass=0;\r\n   x\r\n   break;\r\n  end \r\n  \r\n  % Draw check Post computer move (9th move)\r\n  if sum(x(:))\u003e=13,\r\n   draws=draws+1;\r\n   break;\r\n  end\r\n  \r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  if x(p(1))~=0,Pass=0;end % Invalid move - Game over\r\n  x(p(1))=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move\r\n  \r\n  \r\n end % gameover while 1:2000\r\nend % Games 1:2000\r\n\r\n\r\nfor i=1:2000 % Player First;  2001-40000 Player First\r\n if Pass==0,break;end\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  if x(p(1))~=0,Pass=0;end % Invalid move - Game over\r\n  x(p(1))=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move\r\n  \r\n  \r\n  % Draw check Post Player move (9th move)\r\n  if sum(x(:))\u003e=13,\r\n   draws=draws+1;\r\n   break;\r\n  end\r\n  \r\n  % Computer Move\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n  \r\n% Random unless Win presents itself\r\n  v0=find(x==0)';\r\n  t1=x;\r\n  t1(t1==2)=-2; % Player pips set to -2\r\n% Check for Win Option\r\n wc=find(sum(t1)==2); % column with a win\r\n if ~isempty(wc)\r\n  p=intersect((1:3)+3*(wc-1),v0);\r\n end\r\n wr=find(sum(t1,2)==2); % row with a win\r\n if ~isempty(wr)\r\n  p=intersect((1:3:7)+(wr-1),v0);\r\n end\r\n% Diagonal Win Options\r\nif x(5)==1\r\n if x(1)==1 \u0026\u0026 x(9)==0,p=9;end\r\n if x(9)==1 \u0026\u0026 x(1)==0,p=1;end\r\n if x(3)==1 \u0026\u0026 x(7)==0,p=7;end\r\n if x(7)==1 \u0026\u0026 x(3)==0,p=3;end\r\nend\r\n% end of Win check\r\n   \r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win % Computer Wins on its move : Match Over\r\n   Pass=0;\r\n   x\r\n   break;\r\n  end \r\n  \r\n  \r\n end % gameover while 1:2000\r\nend % Games 1:2000\r\nwins\r\ndraws\r\nPass\r\nassert(isequal(Pass,1))\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":11,"test_suite_updated_at":"2012-05-23T04:19:50.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-19T23:49:07.000Z","updated_at":"2026-01-04T12:38:00.000Z","published_at":"2012-05-20T00:36:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003eLet's play a friendly game of Tic Tac Toe\u003c/w:t\u003e\u003c/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\u003eCreate an efficient algorithm to Never Lose.\u003c/w:t\u003e\u003c/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 Player may be either the first or second to play.\u003c/w:t\u003e\u003c/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\u003eInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer output is an integer 1:9 to identify array index position\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 4 7\\n 2 5 8\\n 3 6 9]]\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 game play:\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[ Input:        [1 0 0; 0 0 0; 0 0 0]  % Computer playing first in this example\\n Output:        5                     % Player return value\\n Yields :      [1 0 0; 0 2 0; 0 0 0]  % Computer then picks position 2.\\n Second Input: [1 0 0; 1 2 0; 0 0 0]  % Computer's second move shown.]]\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\u003ePassing score is never losing.\u003c/w:t\u003e\u003c/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 contest engine is almost Random - about 4000 times. (\u0026lt;12% of Time-Out)\u003c/w:t\u003e\u003c/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\u003eCreating the perfect tic-tac-toe engine seemed unnecessary.\u003c/w:t\u003e\u003c/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\u003eYour Wins/Losses/Draws will be shown.\u003c/w:t\u003e\u003c/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\u003eOn a loss the losing board will be shown\u003c/w:t\u003e\u003c/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\u003eFollow-up game will be WOPR:Global Thermonuclear War.\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":715,"title":"Chezz_015 : Simplified chess","description":"Chezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\r\n\r\nSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\r\n\r\nChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\r\n\r\n\r\n*Inputs:* (b,pmv,castle)\r\n\r\nPlayer always appears to be White. However, Black may apparently move first.\r\n\r\nb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\r\n\r\npmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\r\n\r\ncastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\r\n\r\n\r\n\r\n*Output:* mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\r\n\r\n\r\n\r\nThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\r\n\r\n*Passing:* Player must Win both games\r\n\r\n*Evolution:* Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\r\n\r\n\r\nChezz_015: Pawn Serial Attack - Will capture and Promote\r\n\r\nLink update 12/27/12","description_html":"\u003cp\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/p\u003e\u003cp\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\u003c/p\u003e\u003cp\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (b,pmv,castle)\u003c/p\u003e\u003cp\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/p\u003e\u003cp\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/p\u003e\u003cp\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/p\u003e\u003cp\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/p\u003e\u003cp\u003eThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e Player must Win both games\u003c/p\u003e\u003cp\u003e\u003cb\u003eEvolution:\u003c/b\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/p\u003e\u003cp\u003eChezz_015: Pawn Serial Attack - Will capture and Promote\u003c/p\u003e\u003cp\u003eLink update 12/27/12\u003c/p\u003e","function_template":"function mv=player_move(b,pmv,castle)\r\n% Author: Richard Z\r\n% Bot name: First Pawn Attack\r\n% Chezz_015\r\n% http://tinyurl.com/matlab-chezz-Cmove015\r\n%\r\n% 0-wht 1-Blk; board 8x8, opponents last move, \r\n% castle vector(8 40 64 1 33 57) 0=has moved, 1=eligible\r\n mv=zeros(1,3); % [from to promo] \r\n % mv =[39 37 0] is e4\r\n % pmv (opponents last move) is used for en passant\r\n % [0 0 0] is invalid move or first move of game\r\n % castle is used to castle yourself or see if opponent may castle\r\n \r\n pieces=1:6;\r\n enemy=7:12;\r\n\r\n pv=find(b==1);\r\n no_move=true;\r\n ptr=0;\r\n \r\n % loop thru pawns types; capture L/R or Move up\r\n \r\n while no_move\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  if ismember(r,[1 8]),continue;end % end row for a P\r\n  if c==1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n  end\r\n  if c==8\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  if c\u003c8 \u0026\u0026 c\u003e1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  \r\n  % Move fwd\r\n  if b(pv(ptr)-1)==0\r\n   mv=[pv(ptr) pv(ptr)-1 6];\r\n   return;\r\n  end\r\n  \r\n end % while no move\r\n\r\nend % End of Computer Champion Bot","test_suite":"%%\r\n% Load in the routines that play the game and check move validity\r\ntic\r\nurlwrite('http://rmatlabtest.appspot.com/Chezz_Shell.m','Chezz_Shell.m') ;\r\nurlwrite('http://rmatlabtest.appspot.com/ghost_white.m','ghost_white.m') \r\nurlwrite('http://rmatlabtest.appspot.com/computer_move015.m','computer_move.m') \r\nurlwrite('http://rmatlabtest.appspot.com/mov_chk.m','mov_chk.m') \r\nrehash path\r\ntoc\r\n%%\r\n% Play Two Chezz games\r\n% Player must win Twice to Pass\r\nglobal pmvout1 pmvout2\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% P 1/7 R 2/8 N 3/9 B 4/10 Q 5/11 K 6/12 \r\n b(2,:)=7;\r\n b(1,:)=[8 9 10 11 12 10 9 8]; % Player 7:12\r\n b(7,:)=1;\r\n b(8,:)=b(1,:)-6; % Computer 1:6\r\n b_orig=b;\r\n \r\n %mv=zeros(1,3); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n castle=[1 1 1 1 1 1];\r\n % False move call to satisfy Cody Rqmt of TestSuite match Ref Solution\r\n mv=player_move(b,pmv,castle)\r\n  \r\n for computer_wht=0:1\r\n  pmvout1=pmv; % Store game 1 moves\r\n  \r\n  dbg=0;\r\n  game_over=false;\r\n  b=b_orig;\r\n  no_capture=0;\r\n  b_hist=zeros(102,8,8);\r\n  pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n  castle=[1 1 1 1 1 1]; % History of if ever moved w/b Castles/kings\r\n %  idx 8 40 64  1 33 57\r\n \r\n while ~game_over\r\n  mvP=zeros(1,3); % [from to type/promote)] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  \r\n  [mv]=Chezz_Shell(0,b,mvP,pmv(end,:),castle,3); % 0 Wht,..., 3 Check\r\n  pmv=[pmv;mv(1:3)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n     b(mv(2))=b(mv(1)); % potential promotion\r\n     b(mv(1))=0;\r\n     if ismember(b(mv(2)),[1 7])\r\n      if ismember(mv(2),[1:8:57 8:8:64])\r\n       b(mv(2))=mv(3); % Place promoted selection\r\n      end\r\n     end\r\n     \r\n   else % ep or castle by White\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=6;\r\n      if mv(2)==24\r\n        b(8)=0;b(32)=2;  \r\n      else\r\n        b(64)=0;b(48)=2;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=1; % White Pawn\r\n      b(mv(2)+1)=0; % Take pawn that passed\r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n  %b % display board after move\r\n  \r\n  if isempty(find(b==12,1))\r\n   % Game over : Black King Captured\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer King; Player is Wht captured Blk King \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=zeros(1,4); % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Chezz_Shell(1,b,mvP,pmv(end,:),castle,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:3)];\r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(b(mv(2)),[1 7])\r\n     if ismember(mv(2),[1:8:57 8:8:64])\r\n      b(mv(2))=mv(3); % Place promoted selection\r\n     end\r\n    end\r\n   else % ep or castle by Black\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=12;\r\n      if mv(2)==49 % Blk 0-0\r\n        b(57)=0;b(41)=8;  \r\n      else % Blk 0-0-0\r\n        b(1)=0;b(25)=8;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep by Black\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=mv(3);\r\n    % White passed black on prior move\r\n      b(mv(2)-1)=0; \r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n%   b\r\n%   figure(1);imagesc(b,[0 12]);axis equal;\r\n  \r\n  if isempty(find(b==6,1))\r\n   % Game over : Blk captured White King\r\n   game_over=true;\r\n   if computer_wht==0 % Wht Computer King; Player is Blk captured Wht King\r\n    wins=wins+1;\r\n   end\r\n   continue\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n   % Check for 3 position repetition\r\n   for i=1:no_capture-1\r\n    cdelta=0;\r\n    for j=i+1:no_capture\r\n     delta=(b_hist(i,:,:)-b_hist(j,:,:));\r\n     if sum(abs(delta(:)))==0\r\n      cdelta=cdelta+1;\r\n     end\r\n    end\r\n    if cdelta\u003e=7 % repetitions 3 identical setups\r\n     fprintf('Game over due to repetition\\n');\r\n     game_over=true;\r\n    end\r\n   end % rep check loop \r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n\r\npmvout2=pmv;\r\nwins\r\n \r\n% Player must win Twice to Pass\r\ntoc\r\nassert(isequal(wins,2))\r\n\r\n%%\r\nglobal pmvout1 pmvout2\r\n% Output moves for games\r\n\r\n% Output game 2 moves\r\npmv=pmvout1;\r\n   for i=2:3:size(pmv,1)-3\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n   end\r\n   fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end,:));\r\n \r\n% Output game 2 moves\r\npmv=pmvout2;\r\n for i=2:3:size(pmv,1)-3\r\n  fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n  end\r\n% repeat of moves\r\n fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end,:));","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2012-12-27T22:40:04.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-24T04:58:57.000Z","updated_at":"2012-12-27T22:50:08.000Z","published_at":"2012-05-24T05:15:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/w:t\u003e\u003c/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\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \\\"a4\\\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 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\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/w:t\u003e\u003c/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 (b,pmv,castle)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/w:t\u003e\u003c/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\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/w:t\u003e\u003c/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\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/w:t\u003e\u003c/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\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 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: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 mv [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/w:t\u003e\u003c/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 Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/w:t\u003e\u003c/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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player must Win both games\u003c/w:t\u003e\u003c/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\u003eEvolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/w:t\u003e\u003c/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\u003eChezz_015: Pawn Serial Attack - Will capture and Promote\u003c/w:t\u003e\u003c/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\u003eLink update 12/27/12\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":726,"title":"Chezz_020 Pawn Attack and Slaying King","description":"Chezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\r\n\r\nSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\r\n\r\nChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\r\n\r\n\r\n*Inputs:* (b,pmv,castle)\r\n\r\nPlayer always appears to be White. However, Black may apparently move first.\r\n\r\nb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\r\n\r\npmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\r\n\r\ncastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\r\n\r\n\r\n\r\n*Output:* mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\r\n\r\n\r\n\r\nThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\r\n\r\n*Passing:* Player must Win both games\r\n\r\n*Evolution:* Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\r\n\r\nChezz_020: Pawn Attack then Mad King Attack\r\n\r\nLink update 12/27/12","description_html":"\u003cp\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/p\u003e\u003cp\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\u003c/p\u003e\u003cp\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (b,pmv,castle)\u003c/p\u003e\u003cp\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/p\u003e\u003cp\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/p\u003e\u003cp\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/p\u003e\u003cp\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/p\u003e\u003cp\u003eThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e Player must Win both games\u003c/p\u003e\u003cp\u003e\u003cb\u003eEvolution:\u003c/b\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/p\u003e\u003cp\u003eChezz_020: Pawn Attack then Mad King Attack\u003c/p\u003e\u003cp\u003eLink update 12/27/12\u003c/p\u003e","function_template":"function mv=player_move(b,pmv,castle)\r\n% Author: Richard Z\r\n% Bot name: First Pawn then King Attack\r\n% Chezz_020\r\n% http://tinyurl.com/matlab-chezz-Cmove020\r\n mv=zeros(1,3); % [from to promo] \r\n% This is your opponent\r\n\r\n pieces=1:6;\r\n enemy=7:12;\r\n \r\n king_mv=[7 8 9 -1 1 -9 -8 -7]; %\r\n king_attack=[-9 -8 -7 -1 1 7 8 9]; %\r\n \r\n pv=find(b==1); % vector of Pawns\r\n no_move=true;\r\n ptr=0;\r\n \r\n % loop thru piece types\r\n \r\n while no_move % Pawn\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  if ismember(r,[1 8]),continue;end % end row for a P\r\n  if c==1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n  end\r\n  if c==8\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  if c\u003c8 \u0026\u0026 c\u003e1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  \r\n  % Move fwd\r\n  if b(pv(ptr)-1)==0\r\n   mv=[pv(ptr) pv(ptr)-1 6];\r\n   return;\r\n  end\r\n  \r\n end % while no move Pawn\r\n\r\n% No pawn move found; Move on to King\r\n\r\n% No pawn moves left: Attack with King\r\n\r\npv=find(b==6); % Find Kings\r\nno_move=true;\r\nptr=0;\r\n\r\nwhile no_move % King captures\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  for i=1:8 % 8 King attacks\r\n   if (pv(ptr)+king_attack(i)\u003e64) || (pv(ptr)+king_attack(i)\u003c1),continue;end\r\n   if r==1 \u0026\u0026 ismember(i,[1 4 6]),continue;end % make ~ismem 1:64\r\n   if r==8 \u0026\u0026 ismember(i,[3 5 8]),continue;end\r\n   if c==1 \u0026\u0026 ismember(i,[1 2 3]),continue;end\r\n   if c==8 \u0026\u0026 ismember(i,[6 7 8]),continue;end\r\n   if ismember(b(pv(ptr)+king_attack(i)),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+king_attack(i) 0]; % errant r1 attack idx 1 to idx 8\r\n    return; % Attack found\r\n   end\r\n  end % 8 King attacks\r\nend % while King capture search\r\n\r\n% No King capture move found\r\nmyk=pv(1); % First King\r\nek=find(b==max(enemy),1); %Find an enemy king\r\n[kr1 kc1]=ind2sub([8 8],myk);\r\n[er1 ec1]=ind2sub([8 8],ek);\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[7 8 -1 9 -9 -8 1 -7];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[9 8  1 -7 7 -8 -1 -9];end\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-9 -1 -8 -7 7 8 1 9];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-7 1 -8 9 -9 8 -1 7];end\r\nfor i=1:8\r\n if kr1==1 \u0026\u0026 ismember(king_mv(i),[-9 -1 7]),continue;end\r\n if kr1==8 \u0026\u0026 ismember(king_mv(i),[-7 1 9]),continue;end\r\n if kc1==1 \u0026\u0026 ismember(king_mv(i),[-9 -8 -7]),continue;end\r\n if kc1==8 \u0026\u0026 ismember(king_mv(i),[7 8 9]),continue;end\r\n if ismember(b(myk+king_mv(i)),0) % empty\r\n  mv=[myk myk+king_mv(i) 0];\r\n  return; % path found\r\n end\r\nend\r\n% Hopefully don't get here as mv=[0 0 0]\r\n\r\nend % End of Computer Champion Bot","test_suite":"%%\r\n% Load in the routines that play the game and check move validity\r\ntic\r\nurlwrite('http://rmatlabtest.appspot.com/Chezz_Shell.m','Chezz_Shell.m') ;\r\nurlwrite('http://rmatlabtest.appspot.com/ghost_white.m','ghost_white.m') \r\nurlwrite('http://rmatlabtest.appspot.com/computer_move020.m','computer_move.m') \r\nurlwrite('http://rmatlabtest.appspot.com/mov_chk.m','mov_chk.m') \r\nrehash path\r\ntoc\r\n%%\r\n% Play Two Chezz games\r\n% Player must win Twice to Pass\r\nglobal pmvout1 pmvout2\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% P 1/7 R 2/8 N 3/9 B 4/10 Q 5/11 K 6/12 \r\n b(2,:)=7;\r\n b(1,:)=[8 9 10 11 12 10 9 8]; % Player 7:12\r\n b(7,:)=1;\r\n b(8,:)=b(1,:)-6; % Computer 1:6\r\n b_orig=b;\r\n \r\n %mv=zeros(1,3); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n castle=[1 1 1 1 1 1];\r\n % False move call to satisfy Cody Rqmt of TestSuite match Ref Solution\r\n mv=player_move(b,pmv,castle)\r\n  \r\n for computer_wht=0:1\r\n  pmvout1=pmv; % Store game 1 moves\r\n  \r\n  dbg=0;\r\n  game_over=false;\r\n  b=b_orig;\r\n  no_capture=0;\r\n  b_hist=zeros(102,8,8);\r\n  pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n  castle=[1 1 1 1 1 1]; % History of if ever moved w/b Castles/kings\r\n %  idx 8 40 64  1 33 57\r\n \r\n while ~game_over\r\n  mvP=zeros(1,3); % [from to type/promote)] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  \r\n  [mv]=Chezz_Shell(0,b,mvP,pmv(end,:),castle,3); % 0 Wht,..., 3 Check\r\n  pmv=[pmv;mv(1:3)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n     b(mv(2))=b(mv(1)); % potential promotion\r\n     b(mv(1))=0;\r\n     if ismember(b(mv(2)),[1 7])\r\n      if ismember(mv(2),[1:8:57 8:8:64])\r\n       b(mv(2))=mv(3); % Place promoted selection\r\n      end\r\n     end\r\n     \r\n   else % ep or castle by White\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=6;\r\n      if mv(2)==24\r\n        b(8)=0;b(32)=2;  \r\n      else\r\n        b(64)=0;b(48)=2;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=1; % White Pawn\r\n      b(mv(2)+1)=0; % Take pawn that passed\r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n  %b % display board after move\r\n  \r\n  if isempty(find(b==12,1))\r\n   % Game over : Black King Captured\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer King; Player is Wht captured Blk King \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=zeros(1,4); % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Chezz_Shell(1,b,mvP,pmv(end,:),castle,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:3)];\r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(b(mv(2)),[1 7])\r\n     if ismember(mv(2),[1:8:57 8:8:64])\r\n      b(mv(2))=mv(3); % Place promoted selection\r\n     end\r\n    end\r\n   else % ep or castle by Black\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=12;\r\n      if mv(2)==49 % Blk 0-0\r\n        b(57)=0;b(41)=8;  \r\n      else % Blk 0-0-0\r\n        b(1)=0;b(25)=8;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep by Black\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=mv(3);\r\n    % White passed black on prior move\r\n      b(mv(2)-1)=0; \r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n%   b\r\n%   figure(1);imagesc(b,[0 12]);axis equal;\r\n  \r\n  if isempty(find(b==6,1))\r\n   % Game over : Blk captured White King\r\n   game_over=true;\r\n   if computer_wht==0 % Wht Computer King; Player is Blk captured Wht King\r\n    wins=wins+1;\r\n   end\r\n   continue\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n   % Check for 3 position repetition\r\n   for i=1:no_capture-1\r\n    cdelta=0;\r\n    for j=i+1:no_capture\r\n     delta=(b_hist(i,:,:)-b_hist(j,:,:));\r\n     if sum(abs(delta(:)))==0\r\n      cdelta=cdelta+1;\r\n     end\r\n    end\r\n    if cdelta\u003e=7 % repetitions 3 identical setups\r\n     fprintf('Game over due to repetition\\n');\r\n     game_over=true;\r\n    end\r\n   end % rep check loop \r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n\r\npmvout2=pmv;\r\nwins\r\n \r\n% Player must win Twice to Pass\r\ntoc\r\nassert(isequal(wins,2))\r\n\r\n%%\r\nglobal pmvout1 pmvout2\r\n% Output moves for games\r\n\r\n% Output game 2 moves\r\npmv=pmvout1;\r\n   for i=2:3:size(pmv,1)-3\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n   end\r\n   fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end,:));\r\n \r\n% Output game 2 moves\r\npmv=pmvout2;\r\n for i=2:3:size(pmv,1)-3\r\n  fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n  end\r\n% repeat of moves\r\n fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end,:));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2012-12-27T22:44:29.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-28T06:59:32.000Z","updated_at":"2012-12-27T22:44:29.000Z","published_at":"2012-05-28T07:41:09.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\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/w:t\u003e\u003c/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\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \\\"a4\\\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 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\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/w:t\u003e\u003c/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 (b,pmv,castle)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/w:t\u003e\u003c/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\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/w:t\u003e\u003c/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\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/w:t\u003e\u003c/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\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 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: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 mv [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/w:t\u003e\u003c/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 Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/w:t\u003e\u003c/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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player must Win both games\u003c/w:t\u003e\u003c/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\u003eEvolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/w:t\u003e\u003c/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\u003eChezz_020: Pawn Attack then Mad King Attack\u003c/w:t\u003e\u003c/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\u003eLink update 12/27/12\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":727,"title":"Checkerz_000 Kamikazi Kings","description":"Checkerz: A simplified single jump checkers game between a computer bot and a player bot. Multiple jumps are not allowed.\r\n\r\nThe setup requires the player to copy the entire template into his solution.\r\n\r\nThe template includes a Shell routine that call the Player, Computer, and the Jump Check routines for move validation.\r\n\r\nThe player writes his Bot under the player_move routine.\r\n\r\nThe player will always appear to be playing as White.\r\nThe players pieces are 1-Pawn and 2-King.\r\n\r\nThe Computer pieces will appear as 3-Pawn and 4-King.\r\n\r\nThe board is a standard 8x8 with empty squares as 0.\r\n\r\nThe player move is an array index from-to. eg mv=[8 15].  Value range 1 to 64.\r\n\r\nThe routine find_jumps will provide all potential jumps.\r\n\r\nIf a jump(s) may occur then one must be used. eg mv=[8 22] which jumps a piece on 15.\r\n\r\nAn invalid move or a missed jump is a Loss.\r\n\r\n*Input:* Board  8x8 array \r\n\r\n*Output:* Move  [index_from  index_to]\r\n\r\nTo Pass requires Winning Twice. Once as first move and once as second move.\r\n\r\n100 No-capture move series is a Draw\r\n\r\nMoves will be displayed\r\n\r\nCheckerz_000 Kamikazi_Kings: Random Pawn moves and Kings will hunt the enemy.","description_html":"\u003cp\u003eCheckerz: A simplified single jump checkers game between a computer bot and a player bot. Multiple jumps are not allowed.\u003c/p\u003e\u003cp\u003eThe setup requires the player to copy the entire template into his solution.\u003c/p\u003e\u003cp\u003eThe template includes a Shell routine that call the Player, Computer, and the Jump Check routines for move validation.\u003c/p\u003e\u003cp\u003eThe player writes his Bot under the player_move routine.\u003c/p\u003e\u003cp\u003eThe player will always appear to be playing as White.\r\nThe players pieces are 1-Pawn and 2-King.\u003c/p\u003e\u003cp\u003eThe Computer pieces will appear as 3-Pawn and 4-King.\u003c/p\u003e\u003cp\u003eThe board is a standard 8x8 with empty squares as 0.\u003c/p\u003e\u003cp\u003eThe player move is an array index from-to. eg mv=[8 15].  Value range 1 to 64.\u003c/p\u003e\u003cp\u003eThe routine find_jumps will provide all potential jumps.\u003c/p\u003e\u003cp\u003eIf a jump(s) may occur then one must be used. eg mv=[8 22] which jumps a piece on 15.\u003c/p\u003e\u003cp\u003eAn invalid move or a missed jump is a Loss.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Board  8x8 array\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Move  [index_from  index_to]\u003c/p\u003e\u003cp\u003eTo Pass requires Winning Twice. Once as first move and once as second move.\u003c/p\u003e\u003cp\u003e100 No-capture move series is a Draw\u003c/p\u003e\u003cp\u003eMoves will be displayed\u003c/p\u003e\u003cp\u003eCheckerz_000 Kamikazi_Kings: Random Pawn moves and Kings will hunt the enemy.\u003c/p\u003e","function_template":"function mv = Checkerz_Shell(wht_blk,b,mv,ptr)\r\n % Copy this into Players function entry\r\n %figure(1);imagesc(b,[-2 4]);axis equal\r\n %pause(0.1)\r\n \r\n % Remap routine so Engines always think they are White\r\n bv=zeros(8,8); % form of 8x8\r\n bv(1:64)=1:64;\r\n %pmap=(1:4); % [WP WK BP BK]\r\n if wht_blk==1 % Invert Player Perspective\r\n  [b,mv,bv]=ghost_white(b,mv,bv);\r\n end\r\n \r\n % Call Algorithm - White based\r\n % Un-Map to Black if required\r\n \r\n switch ptr\r\n     case {1}\r\n         mv=computer_move(b);\r\n% Self play\r\n% mv=player_move(b);\r\n     case {2}\r\n         mv=player_move(b);\r\n     case {3}\r\n         mv=mov_chk(b,mv);\r\n end % switch ptr\r\n \r\n %Remap mv to Black or leave unchanged if White\r\n if ismember(mv(1),1:64),mv(1)=bv(mv(1));end\r\n if ismember(mv(2),1:64),mv(2)=bv(mv(2));end\r\n \r\nend % Checkerz_Shell\r\n\r\nfunction [b,mv,bv]=ghost_white(b,mv,bv)\r\n% Map Blk to Wht to process \r\n  bv=rot90(rot90(bv)); % Board re-map\r\n  pmap=[3 4 1 2]; % Piece re-map to WP WK BP BK\r\n  \r\n  b=rot90(rot90(b));\r\n  v=find(b\u003e0);\r\n  b(v)=pmap(b(v));\r\n  \r\n  v=find(mv(1:2)\u003e0);\r\n  mv(v)=bv(mv(v));\r\n  \r\nend\r\n\r\nfunction [jv]=find_jumps(b)\r\n jv=[];\r\n P=find(b==1);\r\n K=find(b==2);\r\n \r\n Pjv=ones(64,2);\r\n Pjv = bsxfun(@times, Pjv, [-18 14]); % TL TR\r\n Pjv(1:18,:)=bsxfun(@times,Pjv(1:18,:),[0 1]);\r\n Pjv(2:8:58,:)=bsxfun(@times,Pjv(2:8:58,:),[0 0]);\r\n Pjv(50:64,:)=bsxfun(@times,Pjv(50:64,:),[1 0]);\r\n Pjv([1:2:7 10:2:16 17:2:23],:)=bsxfun(@times,Pjv([1:2:7 10:2:16 17:2:23],:),[0 0]);\r\n Pjv([26:2:32 33:2:39 42:2:48],:)=bsxfun(@times,Pjv([26:2:32 33:2:39 42:2:48],:),[0 0]);\r\n Pjv([49:2:55 58:2:64],:)=bsxfun(@times,Pjv([49:2:55 58:2:64],:),[0 0]);\r\n \r\n Kjv=ones(64,4);\r\n Kjv = bsxfun(@times, Kjv, [14 18 -14 -18]); % TR BR BL TL\r\n Kjv([2 9],:)=bsxfun(@times,Kjv([2 9],:),[0 1 0 0]);\r\n Kjv([4 6 11 13],:)=bsxfun(@times,Kjv([4 6 11 13],:),[1 1 0 0]);\r\n Kjv([8 15],:)=bsxfun(@times,Kjv([8 15],:),[1 0 0 0]);\r\n Kjv([18 25 34 41],:)=bsxfun(@times,Kjv([18 25 34 41],:),[0 1 1 0]);\r\n Kjv([24 31 40 47],:)=bsxfun(@times,Kjv([24 31 40 47],:),[1 0 0 1]);\r\n Kjv([50 57],:)=bsxfun(@times,Kjv([50 57],:),[0 0 1 0]);\r\n Kjv([52 54 59 61],:)=bsxfun(@times,Kjv([52 54 59 61],:),[0 0 1 1]);\r\n Kjv([56 63],:)=bsxfun(@times,Kjv([56 63],:),[0 0 0 1]);\r\n Kjv([1:2:7 10:2:16 17:2:23],:)=bsxfun(@times,Kjv([1:2:7 10:2:16 17:2:23],:),[0 0 0 0]);\r\n Kjv([26:2:32 33:2:39 42:2:48],:)=bsxfun(@times,Kjv([26:2:32 33:2:39 42:2:48],:),[0 0 0 0]);\r\n Kjv([49:2:55 58:2:64],:)=bsxfun(@times,Kjv([49:2:55 58:2:64],:),[0 0 0 0]);\r\n \r\n for i=1:length(P)\r\n  Pi=P(i);\r\n  for j=1:2\r\n   if Pjv(Pi,j)==0,continue;end\r\n   if b(Pi+Pjv(Pi,j))==0 \u0026\u0026 b(Pi+Pjv(Pi,j)/2)\u003e2\r\n    jv=[jv;Pi Pi+Pjv(Pi,j)];\r\n   end\r\n  end\r\n end\r\n \r\n \r\n \r\n for i=1:length(K)\r\n  Ki=K(i);\r\n  for j=1:4\r\n   if Kjv(Ki,j)==0,continue;end\r\n   if b(Ki+Kjv(Ki,j))==0 \u0026\u0026 b(Ki+Kjv(Ki,j)/2)\u003e2\r\n    jv=[jv;Ki K(i)+Kjv(Ki,j)];\r\n   end\r\n  end\r\n end\r\n\r\n \r\nend\r\n\r\n function mv=player_move(b)\r\n % Copy Checkerz_Shell, computer_move, and mov_chk functions into entry  \r\n % Create Player entry inside this function\r\n %\r\n % Author: Your Name\r\n % Bot name:  Your Bot's Nmae\r\n\r\n mv=[0 0]; % [from to] \r\n \r\n% Introduction function to avoid missing jumps\r\n% Player may modify. This is informational jumps only\r\n jv=find_jumps(b);\r\n if ~isempty(jv)\r\n  mv=jv(1,:); % Use the first jump\r\n  return\r\n end\r\n\r\n % End of Player entry\r\n end % End of Player Bot\r\n\r\nfunction mv=computer_move(b)\r\n% Author: Richard Z\r\n% Bot name: Kamikazi : Jump, Pmove, Kattack, Kmove \r\n% Checkerz_000\r\n mv=[0 0]; % [from to] \r\n \r\n jv=find_jumps(b);\r\n if ~isempty(jv)\r\n  mv=jv(1,:); % Use the first jump\r\n  return\r\n end\r\n\r\n % Pawn\r\n pv=find(b==1); % vector of Pawns\r\n %if ~isempty(pv),pv=pv(randperm(length(pv)));end\r\n ptr=0;\r\n while true % Pawn\r\n  pm=[-9 7];\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  if c==1, pm=pm.*[0 1];end\r\n  if c==8,pm=pm.*[1 0];end\r\n  \r\n  for i=1:2\r\n   if b(pv(ptr)+pm(i))==0\r\n    mv=[pv(ptr) pv(ptr)+pm(i)];\r\n    return\r\n   end\r\n  end\r\n end % while no move Pawn\r\n \r\n \r\n % No King capture move found\r\nmyk=find(b==2,1); % First King\r\nep=find(b\u003e2,1); %Find an enemy piece, Pawns or Kings\r\n[kr1 kc1]=ind2sub([8 8],myk);\r\n[er1 ec1]=ind2sub([8 8],ep);\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[7 9 -9 -7];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[9 7 -7 -9];end\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-9 7 -7 9];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-7 9 -9 7];end\r\nfor i=1:4\r\n if kr1==1 \u0026\u0026 ismember(king_mv(i),[-9 7]),continue;end\r\n if kr1==8 \u0026\u0026 ismember(king_mv(i),[-7 9]),continue;end\r\n if kc1==1 \u0026\u0026 ismember(king_mv(i),[-9 -7]),continue;end\r\n if kc1==8 \u0026\u0026 ismember(king_mv(i),[7 9]),continue;end\r\n if b(myk+king_mv(i))==0 % empty square\r\n  mv=[myk myk+king_mv(i)];\r\n  return; % path found\r\n end\r\nend\r\n \r\n% Can I get here if I have a King?\r\n % King\r\n kv=find(b==2); % vector of Kings\r\n %if ~isempty(pv),pv=pv(randperm(length(pv)));end\r\n ptr=0;\r\n while true % King\r\n  km=[7 9 -7 -9];\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(kv),break;end\r\n  [r c]=ind2sub([8 8],kv(ptr));\r\n  if c==1, km=km.*[1 1 0 0];end\r\n  if c==8, km=km.*[0 0 1 1];end\r\n  if r==1, km=km.*[0 1 1 0];end\r\n  if r==8, km=km.*[1 0 0 1];end\r\n  \r\n  \r\n  for i=1:4\r\n   if b(kv(ptr)+km(i))==0\r\n    mv=[kv(ptr) kv(ptr)+km(i)];\r\n    return\r\n   end\r\n  end\r\n end % while no move King\r\n \r\n \r\n% Hopefully don't get here as mv=[0 0] and we lose\r\n\r\nend % End of Computer Bot\r\n\r\nfunction mv_out=mov_chk(b,mv)\r\n % Improvement of mov_chk will be a separate Cody challenge\r\n % Must Copy into Solution Entry\r\n % Invalid move returns [0 0]\r\n mv_out=[0 0]; % default is Invalid\r\n \r\n % verify valid: Entry, Color, Possible capture\r\n if ~ismember(mv(1),1:64) || ~ismember(mv(2),1:64),return;end % Invalid mv\r\n if ~ismember(b(mv(1)),(1:2)),return;end % Moving Wrong team\r\n  % Must move to empty square\r\n if b(mv(2))~=0,return;end\r\n \r\n  \r\n delta=mv(2)-mv(1); % Movement vector\r\n if ~ismember(delta,[7 9 14 18 -7 -9 -14 -18]),return;end % Invalid mv\r\n \r\n msum=mv(1)+mv(2); % Jump midpoint if jump check\r\n \r\n  % use for move checks\r\n [r1 c1]=ind2sub([8 8],mv(1));\r\n [r2 c2]=ind2sub([8 8],mv(2));\r\n \r\n if abs(r1-r2)\u003e2,return;end % Invalid\r\n if abs(c1-c2)\u003e2,return;end % Invalid\r\n   \r\n jv=find_jumps(b);\r\n\r\n if ~isempty(jv)\r\n  if abs(delta)\u003c14,return;end % Jump not executed\r\n end\r\n \r\n \r\n if abs(delta)\u003e13 % Jump claimed\r\n  if b(msum/2)\u003c3,return;end % Invalid Jump -Own or Empty\r\n  \r\n  if b(mv(1))==1 \u0026\u0026 (delta==-18 ||delta==14)\r\n   mv_out=mv; % Valid move\r\n   return;\r\n  end % Legal P Jump\r\n  \r\n  if b(mv(1))==2 \u0026\u0026 (abs(delta)==18 || abs(delta)==14)\r\n   mv_out=mv; % Valid move\r\n   return;\r\n  end % Legal K Jump\r\n  \r\n  return; % Invalid Jump\r\n end % Jump\r\n \r\n % abs(delta)\u003c12 Regular move\r\n if b(mv(1))==1 \u0026\u0026 (delta==-9 ||delta==7)\r\n  mv_out=mv; % Valid move\r\n  return;\r\n end % Legal P mv\r\n \r\n if b(mv(1))==2 \u0026\u0026 (abs(delta)==9 || abs(delta) ==7)\r\n  mv_out=mv; % Valid move\r\n  return;\r\n end % Legal K mv\r\n \r\n mv_out=[0 0]; % Checks failed\r\nend\r\n","test_suite":"%%\r\n%Test Suite\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% WP 1 BP 3  [WK 2 BK 4] \r\n b([2 9 11 18 25 27 34 41 43 50 57 59])=3;\r\n b([6 8 15 22 24 31 38 40 47 54 56 63])=1;\r\n b_orig=b;\r\n \r\n %mv=zeros(1,2); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,2); % Move History for record only\r\n  \r\n for computer_wht=0:1\r\n  if size(pmv,1)\u003e3\r\n   for i=1:4:size(pmv,1)-4\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i\\n',pmv(i,1:2),pmv(i+1,1:2),pmv(i+2,1:2),pmv(i+3,1:2));\r\n   end\r\n   fprintf('%2i %2i\\n',pmv(end-3,:));\r\n   fprintf('%2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i\\n',pmv(end,:));\r\n % Output game 1 moves\r\n  end\r\n  %pmv % Output move history from Game 1\r\n  game_over=false;\r\n  b=b_orig; % Reset for second game\r\n  no_capture=0;\r\n  pmv=zeros(1,2); % [from to promo)] Opponents last move\r\n \r\n while ~game_over\r\n  mvP=zeros(1,2); % [from to] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Checkerz_Shell(0,b,mvP,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Checkerz_Shell(0,b,mvP,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  [mv]=Checkerz_Shell(0,b,mvP,3); % 0 Wht,..., 3 Check\r\n  \r\n  pmv=[pmv;mv(1:2)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk \r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(mv(2),[9 25 41 57])\r\n     b(mv(2))=2; % Kinged\r\n    end\r\n    if abs(mv(1)-mv(2))\u003e9\r\n     % Piece jumped\r\n     capture=true;\r\n     b((mv(1)+mv(2))/2)=0;\r\n    end\r\n  end % end move\r\n  \r\n  if isempty(find(b\u003e2)) % White has captured All Blk Pieces\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer Loses; Player is Wht \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  if mv(1)==0 % No legal move or missed jump\r\n   % Game over : White failed to move and Loses\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==0 % Wht Computer Loses; Player is Blk \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n    \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end %\r\n  else\r\n   no_capture=1;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=[0 0]; % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Checkerz_Shell(1,b,mvP,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Checkerz_Shell(1,b,mvP,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Checkerz_Shell(1,b,mvP,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:2)];\r\n \r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk \r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(mv(2),[8 24 40 56])\r\n     b(mv(2))=4; % Kinged\r\n    end\r\n    if abs(mv(1)-mv(2))\u003e9\r\n     % Piece jumped\r\n     capture=true;\r\n     b((mv(1)+mv(2))/2)=0;\r\n    end\r\n  end % end move\r\n  \r\n  if isempty([find(b==1)' find(b==2)']) % Black has captured All Wht Pieces\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==0 % Wht Computer Loses; Player is Blk \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  if mv(1)==0 % No legal move or missed jump by Black\r\n   % Game over : Black failed to move correctly and Loses\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer Loses; Player is Wht \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n  else\r\n   no_capture=1;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n \r\n wins\r\n   if size(pmv,1)\u003e3\r\n    for i=1:4:size(pmv,1)-4\r\n     fprintf('%2i %2i %2i %2i %2i %2i %2i %2i\\n',pmv(i,1:2),pmv(i+1,1:2),pmv(i+2,1:2),pmv(i+3,1:2));\r\n    end\r\n    fprintf('%2i %2i\\n',pmv(end-3,:));\r\n    fprintf('%2i %2i\\n',pmv(end-2,:));\r\n    fprintf('%2i %2i\\n',pmv(end-1,:));\r\n    fprintf('%2i %2i\\n',pmv(end,:));\r\n % Output game 2 moves?\r\n  end\r\n \r\nwins\r\ntoc\r\n\r\n % Player must beat computer twice\r\n %assert(isequal(wins,2))\r\n \r\nPass=1;\r\nassert(isequal(Pass,1))","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-30T03:08:30.000Z","updated_at":"2012-05-30T03:20:09.000Z","published_at":"2012-05-30T03:17:56.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\u003eCheckerz: A simplified single jump checkers game between a computer bot and a player bot. Multiple jumps are not 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\u003eThe setup requires the player to copy the entire template into his 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 template includes a Shell routine that call the Player, Computer, and the Jump Check routines for move validation.\u003c/w:t\u003e\u003c/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 player writes his Bot under the player_move routine.\u003c/w:t\u003e\u003c/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 player will always appear to be playing as White. The players pieces are 1-Pawn and 2-King.\u003c/w:t\u003e\u003c/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 Computer pieces will appear as 3-Pawn and 4-King.\u003c/w:t\u003e\u003c/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 board is a standard 8x8 with empty squares as 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\u003eThe player move is an array index from-to. eg mv=[8 15]. Value range 1 to 64.\u003c/w:t\u003e\u003c/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 routine find_jumps will provide all potential jumps.\u003c/w:t\u003e\u003c/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 a jump(s) may occur then one must be used. eg mv=[8 22] which jumps a piece on 15.\u003c/w:t\u003e\u003c/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 invalid move or a missed jump is a Loss.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Board 8x8 array\u003c/w:t\u003e\u003c/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 Move [index_from index_to]\u003c/w:t\u003e\u003c/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 Pass requires Winning Twice. Once as first move and once as second 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:t\u003e100 No-capture move series is a Draw\u003c/w:t\u003e\u003c/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\u003eMoves will be displayed\u003c/w:t\u003e\u003c/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\u003eCheckerz_000 Kamikazi_Kings: Random Pawn moves and Kings will hunt the enemy.\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":916,"title":"Rubik's Cube : Solve Ten Face Move - Speed Scoring","description":"A set of cubes will be scrambled with 10 Face moves.\r\nThe Challenge is to Solve all Cubes in 10 Moves or Less.\r\nScore will be by cumulative time of cubes 2 thru 11. The first cube may be used to load arrays but is still required to solve the cube.\r\nTen moves relates to worst case 18^10 configs - 3.6e12. In actuality there are only 2.4e11 cubes at 10 turns. Brute force might not work.\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/cube_small.gif\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Cube_Map48_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n.\r\n\r\n*Input:* Cube vector (1x48](see Figure) with values 0:5, eight of each\r\n\r\n*Output:* Rotation Vector of 10 or less values. Values range from 1:18\r\n\r\nValues 1:18 represent the standard cube moves:ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\r\n\r\n*Example:* Move of FL[2 4]  requires L'F' solv_vec=[10 8] at a minimum to solve\r\n\r\nCube=[00303003 44410110 11022222 22253533 53344444 11155555] as integer array\r\n\r\nsolv_vec=[10 8]\r\n\r\nActual solutions will be 8 to 10 values.\r\n\r\n\r\nThe Cube sites claim a capability of solving 10 moves in only 40 hrs.\r\nNot sure if they have Matlab, which can achieve 10 moves in \u003c0.15 sec. Matlab with a 16GB/i5 can solve 12 moves in \u003c 1.8 seconds. Unfortunately, Cody appears to have a memory/processing speed issue which makes the 11 and 12 move Challenges impossible.\r\n\r\n\u003chttp://kociemba.org/cube.htm Cube Org\u003e  and \u003chttp://www.speedcubing.com/CubeSolver/CubeSolver.html Speed Cubing\u003e\r\n\r\nThe next Cube Challenge will be to solve a fully randomized cube in as few moves as possible. With this next challenge I'll post my 3D-Cube Viewer Tool used for algorithm development.\r\n ","description_html":"\u003cp\u003eA set of cubes will be scrambled with 10 Face moves.\r\nThe Challenge is to Solve all Cubes in 10 Moves or Less.\r\nScore will be by cumulative time of cubes 2 thru 11. The first cube may be used to load arrays but is still required to solve the cube.\r\nTen moves relates to worst case 18^10 configs - 3.6e12. In actuality there are only 2.4e11 cubes at 10 turns. Brute force might not work.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/cube_small.gif\"\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/Cube_Map48_200.png\"\u003e\u003cimg src=\"http://mathworks.com/matlabcentral/images/surf.gif\"\u003e\u003cp\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Cube vector (1x48](see Figure) with values 0:5, eight of each\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Rotation Vector of 10 or less values. Values range from 1:18\u003c/p\u003e\u003cp\u003eValues 1:18 represent the standard cube moves:ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e Move of FL[2 4]  requires L'F' solv_vec=[10 8] at a minimum to solve\u003c/p\u003e\u003cp\u003eCube=[00303003 44410110 11022222 22253533 53344444 11155555] as integer array\u003c/p\u003e\u003cp\u003esolv_vec=[10 8]\u003c/p\u003e\u003cp\u003eActual solutions will be 8 to 10 values.\u003c/p\u003e\u003cp\u003eThe Cube sites claim a capability of solving 10 moves in only 40 hrs.\r\nNot sure if they have Matlab, which can achieve 10 moves in \u0026lt;0.15 sec. Matlab with a 16GB/i5 can solve 12 moves in \u0026lt; 1.8 seconds. Unfortunately, Cody appears to have a memory/processing speed issue which makes the 11 and 12 move Challenges impossible.\u003c/p\u003e\u003cp\u003e\u003ca href=\"http://kociemba.org/cube.htm\"\u003eCube Org\u003c/a\u003e  and \u003ca href=\"http://www.speedcubing.com/CubeSolver/CubeSolver.html\"\u003eSpeed Cubing\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThe next Cube Challenge will be to solve a fully randomized cube in as few moves as possible. With this next challenge I'll post my 3D-Cube Viewer Tool used for algorithm development.\u003c/p\u003e","function_template":"function solv_vec = Rubik_Solve_10(cube)\r\n  solv_vec=[1 2 3 4 5 6 7 8 9 10 11];\r\n\r\nvf=[ 17 2 3 20 5 22 7 8 11 13 16 10 15 9 12 14 41 18 19 44 21 46 23 24 25 26 27 28 29 30 31 32 33 34 6 36 4 38 39 1 40 42 43 37 45 35 47 48; \r\n  1 2 3 4 5 25 28 30 9 10 8 12 7 14 15 6 19 21 24 18 23 17 20 22 43 26 27 42 29 41 31 32 33 34 35 36 37 38 39 40 11 13 16 44 45 46 47 48 ;\r\n  1 2 38 4 36 6 7 33 9 10 11 12 13 14 15 16 17 18 3 20 5 22 23 8 27 29 32 26 31 25 28 30 48 34 35 45 37 43 39 40 41 42 19 44 21 46 47 24 ;\r\n  3 5 8 2 7 1 4 6 33 34 35 12 13 14 15 16 9 10 11 20 21 22 23 24 17 18 19 28 29 30 31 32 25 26 27 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  14 12 9 4 5 6 7 8 46 10 11 47 13 48 15 16 17 18 19 20 21 22 23 24 25 26 1 28 2 30 31 3 35 37 40 34 39 33 36 38 41 42 43 44 45 32 29 27 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 22 23 24 17 18 19 20 21 30 31 32 25 26 27 28 29 38 39 40 33 34 35 36 37 14 15 16 43 45 48 42 47 41 44 46 ;\r\n  40 2 3 37 5 35 7 8 14 12 9 15 10 16 13 11 1 18 19 4 21 6 23 24 25 26 27 28 29 30 31 32 33 34 46 36 44 38 39 41 17 42 43 20 45 22 47 48 ;\r\n  1 2 3 4 5 16 13 11 9 10 41 12 42 14 15 43 22 20 17 23 18 24 21 19 6 26 27 7 29 8 31 32 33 34 35 36 37 38 39 40 30 28 25 44 45 46 47 48 ;\r\n  1 2 19 4 21 6 7 24 9 10 11 12 13 14 15 16 17 18 43 20 45 22 23 48 30 28 25 31 26 32 29 27 8 34 35 5 37 3 39 40 41 42 38 44 36 46 47 33 ;\r\n  6 4 1 7 2 8 5 3 17 18 19 12 13 14 15 16 25 26 27 20 21 22 23 24 33 34 35 28 29 30 31 32 9 10 11 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  27 29 32 4 5 6 7 8 3 10 11 2 13 1 15 16 17 18 19 20 21 22 23 24 25 26 48 28 47 30 31 46 38 36 33 39 34 40 37 35 41 42 43 44 45 9 12 14 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 38 39 40 17 18 19 20 21 14 15 16 25 26 27 28 29 22 23 24 33 34 35 36 37 30 31 32 46 44 41 47 42 48 45 43 ;\r\n  41 2 3 44 5 46 7 8 16 15 14 13 12 11 10 9 40 18 19 37 21 35 23 24 25 26 27 28 29 30 31 32 33 34 22 36 20 38 39 17 1 42 43 4 45 6 47 48 ;\r\n  1 2 3 4 5 43 42 41 9 10 30 12 28 14 15 25 24 23 22 21 20 19 18 17 16 26 27 13 29 11 31 32 33 34 35 36 37 38 39 40 8 7 6 44 45 46 47 48 ;\r\n  1 2 43 4 45 6 7 48 9 10 11 12 13 14 15 16 17 18 38 20 36 22 23 33 32 31 30 29 28 27 26 25 24 34 35 21 37 19 39 40 41 42 3 44 5 46 47 8 ;\r\n  8 7 6 5 4 3 2 1 25 26 27 12 13 14 15 16 33 34 35 20 21 22 23 24 9 10 11 28 29 30 31 32 17 18 19 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  48 47 46 4 5 6 7 8 32 10 11 29 13 27 15 16 17 18 19 20 21 22 23 24 25 26 14 28 12 30 31 9 40 39 38 37 36 35 34 33 41 42 43 44 45 3 2 1 ; \r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 30 31 32 17 18 19 20 21 38 39 40 25 26 27 28 29 14 15 16 33 34 35 36 37 22 23 24 48 47 46 45 44 43 42 41 ];\r\n\r\n% Basic move is implemented using the rot table\r\n% cube=cube(vf(mov,:)); % mov is 1:18 represents  ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\r\n% Note: only the 48 moving cube tiles are mapped\r\n% a solved cube displays as [000000001111111122222222333333334444444455555555]\r\n\r\nend","test_suite":"%%\r\n% Load max score of 50 seconds\r\nfeval(@assignin,'caller','score',50)\r\n%%\r\nglobal vf gPass\r\nPass=1;\r\n% Load rot map 18 moves : ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\r\n vf=[ 17 2 3 20 5 22 7 8 11 13 16 10 15 9 12 14 41 18 19 44 21 46 23 24 25 26 27 28 29 30 31 32 33 34 6 36 4 38 39 1 40 42 43 37 45 35 47 48; \r\n  1 2 3 4 5 25 28 30 9 10 8 12 7 14 15 6 19 21 24 18 23 17 20 22 43 26 27 42 29 41 31 32 33 34 35 36 37 38 39 40 11 13 16 44 45 46 47 48 ;\r\n  1 2 38 4 36 6 7 33 9 10 11 12 13 14 15 16 17 18 3 20 5 22 23 8 27 29 32 26 31 25 28 30 48 34 35 45 37 43 39 40 41 42 19 44 21 46 47 24 ;\r\n  3 5 8 2 7 1 4 6 33 34 35 12 13 14 15 16 9 10 11 20 21 22 23 24 17 18 19 28 29 30 31 32 25 26 27 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  14 12 9 4 5 6 7 8 46 10 11 47 13 48 15 16 17 18 19 20 21 22 23 24 25 26 1 28 2 30 31 3 35 37 40 34 39 33 36 38 41 42 43 44 45 32 29 27 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 22 23 24 17 18 19 20 21 30 31 32 25 26 27 28 29 38 39 40 33 34 35 36 37 14 15 16 43 45 48 42 47 41 44 46 ;\r\n  40 2 3 37 5 35 7 8 14 12 9 15 10 16 13 11 1 18 19 4 21 6 23 24 25 26 27 28 29 30 31 32 33 34 46 36 44 38 39 41 17 42 43 20 45 22 47 48 ;\r\n  1 2 3 4 5 16 13 11 9 10 41 12 42 14 15 43 22 20 17 23 18 24 21 19 6 26 27 7 29 8 31 32 33 34 35 36 37 38 39 40 30 28 25 44 45 46 47 48 ;\r\n  1 2 19 4 21 6 7 24 9 10 11 12 13 14 15 16 17 18 43 20 45 22 23 48 30 28 25 31 26 32 29 27 8 34 35 5 37 3 39 40 41 42 38 44 36 46 47 33 ;\r\n  6 4 1 7 2 8 5 3 17 18 19 12 13 14 15 16 25 26 27 20 21 22 23 24 33 34 35 28 29 30 31 32 9 10 11 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  27 29 32 4 5 6 7 8 3 10 11 2 13 1 15 16 17 18 19 20 21 22 23 24 25 26 48 28 47 30 31 46 38 36 33 39 34 40 37 35 41 42 43 44 45 9 12 14 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 38 39 40 17 18 19 20 21 14 15 16 25 26 27 28 29 22 23 24 33 34 35 36 37 30 31 32 46 44 41 47 42 48 45 43 ;\r\n  41 2 3 44 5 46 7 8 16 15 14 13 12 11 10 9 40 18 19 37 21 35 23 24 25 26 27 28 29 30 31 32 33 34 22 36 20 38 39 17 1 42 43 4 45 6 47 48 ;\r\n  1 2 3 4 5 43 42 41 9 10 30 12 28 14 15 25 24 23 22 21 20 19 18 17 16 26 27 13 29 11 31 32 33 34 35 36 37 38 39 40 8 7 6 44 45 46 47 48 ;\r\n  1 2 43 4 45 6 7 48 9 10 11 12 13 14 15 16 17 18 38 20 36 22 23 33 32 31 30 29 28 27 26 25 24 34 35 21 37 19 39 40 41 42 3 44 5 46 47 8 ;\r\n  8 7 6 5 4 3 2 1 25 26 27 12 13 14 15 16 33 34 35 20 21 22 23 24 9 10 11 28 29 30 31 32 17 18 19 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  48 47 46 4 5 6 7 8 32 10 11 29 13 27 15 16 17 18 19 20 21 22 23 24 25 26 14 28 12 30 31 9 40 39 38 37 36 35 34 33 41 42 43 44 45 3 2 1 ; \r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 30 31 32 17 18 19 20 21 38 39 40 25 26 27 28 29 14 15 16 33 34 35 36 37 22 23 24 48 47 46 45 44 43 42 41 ];\r\n\r\nr=ones(1,48,'uint8'); \r\n r(1:8)=0; %5;     %Left % straight numeric mapping\r\n r(9:16)=1; %2;   %Up\r\n r(17:24)=2; %3;   %Front\r\n r(25:32)=3; %4;   %Down\r\n r(33:40)=4; %6;   %Back\r\n r(41:48)=5; %7; %Right\r\n \r\nmix=10;\r\nrmov=randi(18,[mix,1]);\r\n for i=1:length(rmov) \r\n  if i\u003e1 % Eliminate move undos\r\n  % f2 f2 or f f'  or f' f\r\n   if (rmov(i)\u003e12 \u0026\u0026 rmov(i-1)==rmov(i))||(rmov(i-1)\u003c7 \u0026\u0026 rmov(i)==rmov(i-1)+6)||...\r\n       (rmov(i-1)\u003e6  \u0026\u0026 rmov(i)==rmov(i-1)-6)    \r\n    rmov(i)=rmov(i)+1;   % 1:17 map to 2:18  18 map to 1\r\n    if rmov(i)==19,rmov(i)=1;end\r\n   end\r\n  end\r\n  r=r(vf(rmov(i),:));\r\n end\r\n\r\n\r\n%assert(isequal(your_fcn_name(x),y_correct))\r\n\r\nt0=clock;\r\nsolv_vec=Rubik_Solve_10(r)\r\ndt=etime(clock,t0)\r\n% Dubious Code Check\r\nif all(r(1:8)==r(1)) \u0026\u0026 all(r(9:16)==r(9))  \u0026\u0026 all(r(17:24)==r(17)) \u0026\u0026 ...\r\n     all(r(25:32)==r(25))  \u0026\u0026 all(r(33:40)==r(33)) \u0026\u0026 all(r(41:48)==r(41))\r\n Pass=0;\r\nend\r\n\r\nPass=Pass \u0026\u0026 length(solv_vec\u003c11);\r\n\r\nlength(solv_vec)\r\nrt=r;\r\nfor i=1:length(solv_vec)\r\n   rt=rt(vf(solv_vec(i),:));\r\n end\r\n if all(rt(1:8)==rt(1)) \u0026\u0026 all(rt(9:16)==rt(9))  \u0026\u0026 all(rt(17:24)==rt(17)) \u0026\u0026 ...\r\n     all(rt(25:32)==rt(25))  \u0026\u0026 all(rt(33:40)==rt(33)) \u0026\u0026 all(rt(41:48)==rt(41))\r\n   fprintf('Cube Solved\\n')\r\n  Pass=Pass; % No change to Pass status\r\n else\r\n  fprintf('Cube Solve Failure\\n')\r\n  Pass=0;\r\n end\r\n\r\nassert(isequal(Pass,1))\r\n\r\ngPass=Pass;\r\n\r\n%%\r\n\r\nglobal gPass vf\r\nPass1=gPass;\r\n\r\n\r\nr=ones(1,48,'uint8'); \r\n r(1:8)=0; %5;     %Left % straight numeric mapping\r\n r(9:16)=1; %2;   %Up\r\n r(17:24)=2; %3;   %Front\r\n r(25:32)=3; %4;   %Down\r\n r(33:40)=4; %6;   %Back\r\n r(41:48)=5; %7; %Right\r\nrbase=r;\r\n\r\nsum_dt=0;\r\nfor cases=1:10 \r\n r=rbase;\r\n mix=10;\r\n rmov=randi(18,[mix,1]);\r\n  for i=1:length(rmov) \r\n   if i\u003e1 % Eliminate move undos\r\n   % f2 f2 or f f'  or f' f\r\n    if (rmov(i)\u003e12 \u0026\u0026 rmov(i-1)==rmov(i))||(rmov(i-1)\u003c7 \u0026\u0026 rmov(i)==rmov(i- 1)+6)||...\r\n       (rmov(i-1)\u003e6  \u0026\u0026 rmov(i)==rmov(i-1)-6)    \r\n     rmov(i)=rmov(i)+1;   % 1:17 map to 2:18  18 map to 1\r\n     if rmov(i)==19,rmov(i)=1;end\r\n    end\r\n   end\r\n   r=r(vf(rmov(i),:));\r\n  end\r\n\r\n\r\nt0=clock;\r\nsolv_vec=Rubik_Solve_10(r)\r\ndt=etime(clock,t0)\r\nsum_dt=sum_dt+dt;\r\n\r\nPass1=Pass1 \u0026\u0026 length(solv_vec\u003c11);\r\n\r\nrt=r;\r\nfor i=1:length(solv_vec)\r\n   rt=rt(vf(solv_vec(i),:));\r\n end\r\n if all(rt(1:8)==rt(1)) \u0026\u0026 all(rt(9:16)==rt(9))  \u0026\u0026 all(rt(17:24)==rt(17)) \u0026\u0026 ...\r\n     all(rt(25:32)==rt(25))  \u0026\u0026 all(rt(33:40)==rt(33)) \u0026\u0026 all(rt(41:48)==rt(41))\r\n   fprintf('Cube Solved\\n')\r\n  Pass1=Pass1; % No change to Pass1 status\r\n else\r\n  fprintf('Cube Solve Failure\\n')\r\n  Pass1=0;\r\n end\r\n\r\nend\r\n\r\n\r\n\r\nassert(isequal(Pass1,1))\r\n\r\nif Pass1\r\n feval(@assignin,'caller','score',floor(sum_dt))\r\nend\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":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-08-19T03:27:10.000Z","updated_at":"2012-08-26T03:40:30.000Z","published_at":"2012-08-19T07:18:19.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.gif\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image2.gif\"}],\"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\u003eA set of cubes will be scrambled with 10 Face moves. The Challenge is to Solve all Cubes in 10 Moves or Less. Score will be by cumulative time of cubes 2 thru 11. The first cube may be used to load arrays but is still required to solve the cube. Ten moves relates to worst case 18^10 configs - 3.6e12. In actuality there are only 2.4e11 cubes at 10 turns. Brute force might not work.\u003c/w:t\u003e\u003c/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: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=\\\"rId2\\\"/\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: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=\\\"rId3\\\"/\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\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Cube vector (1x48](see Figure) with values 0:5, eight of each\u003c/w:t\u003e\u003c/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 Rotation Vector of 10 or less values. Values range from 1:18\u003c/w:t\u003e\u003c/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\u003eValues 1:18 represent the standard cube moves:ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\u003c/w:t\u003e\u003c/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\u003cw:r\u003e\u003cw:t\u003e Move of FL[2 4] requires L'F' solv_vec=[10 8] at a minimum to solve\u003c/w:t\u003e\u003c/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\u003eCube=[00303003 44410110 11022222 22253533 53344444 11155555] as integer array\u003c/w:t\u003e\u003c/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\u003esolv_vec=[10 8]\u003c/w:t\u003e\u003c/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\u003eActual solutions will be 8 to 10 values.\u003c/w:t\u003e\u003c/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 Cube sites claim a capability of solving 10 moves in only 40 hrs. Not sure if they have Matlab, which can achieve 10 moves in \u0026lt;0.15 sec. Matlab with a 16GB/i5 can solve 12 moves in \u0026lt; 1.8 seconds. Unfortunately, Cody appears to have a memory/processing speed issue which makes the 11 and 12 move Challenges impossible.\u003c/w:t\u003e\u003c/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=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Org\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/CubeSolver/CubeSolver.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpeed Cubing\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\u003eThe next Cube Challenge will be to solve a fully randomized cube in as few moves as possible. With this next challenge I'll post my 3D-Cube Viewer Tool used for algorithm development.\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.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"}]}"},{"id":714,"title":"Chezz_000 : Simplified chess","description":"Chezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\r\n\r\nSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\r\n\r\nChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\r\n\r\n\r\n*Inputs:* (b,pmv,castle)\r\n\r\nPlayer always appears to be White. However, Black may apparently move first.\r\n\r\nb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\r\n\r\npmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\r\n\r\ncastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\r\n\r\n\r\n\r\n*Output:* mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\r\n\r\n\r\n\r\nThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\r\n\r\n*Passing:* Player must Win both games\r\n\r\n*Evolution:* Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\r\n\r\n\r\nChezz_000: Makes no moves or captures - The weakest player possible\r\n\r\nLinks updated 12/27/12\r\n\r\n","description_html":"\u003cp\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/p\u003e\u003cp\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\u003c/p\u003e\u003cp\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (b,pmv,castle)\u003c/p\u003e\u003cp\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/p\u003e\u003cp\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/p\u003e\u003cp\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/p\u003e\u003cp\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/p\u003e\u003cp\u003eThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e Player must Win both games\u003c/p\u003e\u003cp\u003e\u003cb\u003eEvolution:\u003c/b\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/p\u003e\u003cp\u003eChezz_000: Makes no moves or captures - The weakest player possible\u003c/p\u003e\u003cp\u003eLinks updated 12/27/12\u003c/p\u003e","function_template":"function mv=player_move(b,pmv,castle)\r\n% Author: Richard Z\r\n% Bot name: Do Nothing\r\n% Chezz_000\r\n%Chezz_000 bot is no legal moves mv=[0 0 0]\r\n%\r\n% 0-wht 1-Blk; board 8x8, opponents last move, \r\n% castle vector(8 40 64 1 33 57) 0=has moved, 1=eligible\r\n% example: mv =[39 37 0] is e4\r\n% pmv (move,from to promo) is used for en passant\r\n% [0 0 0] is invalid move or first move of game\r\n% castle vector is used to castle yourself or see if opponent may castle\r\n \r\n% This is the computer's algorithm - Going for a draw\r\n mv=zeros(1,3); % [from to promo] \r\nend % End of Computer Champion Bot","test_suite":"%%\r\n% Load in the routines that play the game and check move validity\r\ntic\r\nurlwrite('http://rmatlabtest.appspot.com/Chezz_Shell.m','Chezz_Shell.m') ;\r\nurlwrite('http://rmatlabtest.appspot.com/ghost_white.m','ghost_white.m') \r\nurlwrite('http://rmatlabtest.appspot.com/computer_move000.m','computer_move.m') \r\nurlwrite('http://rmatlabtest.appspot.com/mov_chk.m','mov_chk.m') \r\nrehash path\r\ntoc\r\n%%\r\n% Play Two Chezz games\r\n% Player must win Twice to Pass\r\nglobal pmvout1 pmvout2\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% P 1/7 R 2/8 N 3/9 B 4/10 Q 5/11 K 6/12 \r\n b(2,:)=7;\r\n b(1,:)=[8 9 10 11 12 10 9 8]; % Player 7:12\r\n b(7,:)=1;\r\n b(8,:)=b(1,:)-6; % Computer 1:6\r\n b_orig=b;\r\n \r\n %mv=zeros(1,3); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n castle=[1 1 1 1 1 1];\r\n % False move call to satisfy Cody Rqmt of TestSuite match Ref Solution\r\n mv=player_move(b,pmv,castle)\r\n  \r\n for computer_wht=0:1\r\n  pmvout1=pmv; % Store game 1 moves\r\n  \r\n  dbg=0;\r\n  game_over=false;\r\n  b=b_orig;\r\n  no_capture=0;\r\n  b_hist=zeros(102,8,8);\r\n  pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n  castle=[1 1 1 1 1 1]; % History of if ever moved w/b Castles/kings\r\n %  idx 8 40 64  1 33 57\r\n \r\n while ~game_over\r\n  mvP=zeros(1,3); % [from to type/promote)] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  \r\n  [mv]=Chezz_Shell(0,b,mvP,pmv(end,:),castle,3); % 0 Wht,..., 3 Check\r\n  pmv=[pmv;mv(1:3)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n     b(mv(2))=b(mv(1)); % potential promotion\r\n     b(mv(1))=0;\r\n     if ismember(b(mv(2)),[1 7])\r\n      if ismember(mv(2),[1:8:57 8:8:64])\r\n       b(mv(2))=mv(3); % Place promoted selection\r\n      end\r\n     end\r\n     \r\n   else % ep or castle by White\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=6;\r\n      if mv(2)==24\r\n        b(8)=0;b(32)=2;  \r\n      else\r\n        b(64)=0;b(48)=2;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=1; % White Pawn\r\n      b(mv(2)+1)=0; % Take pawn that passed\r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n  %b % display board after move\r\n  \r\n  if isempty(find(b==12,1))\r\n   % Game over : Black King Captured\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer King; Player is Wht captured Blk King \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=zeros(1,4); % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Chezz_Shell(1,b,mvP,pmv(end,:),castle,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:3)];\r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(b(mv(2)),[1 7])\r\n     if ismember(mv(2),[1:8:57 8:8:64])\r\n      b(mv(2))=mv(3); % Place promoted selection\r\n     end\r\n    end\r\n   else % ep or castle by Black\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=12;\r\n      if mv(2)==49 % Blk 0-0\r\n        b(57)=0;b(41)=8;  \r\n      else % Blk 0-0-0\r\n        b(1)=0;b(25)=8;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep by Black\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=mv(3);\r\n    % White passed black on prior move\r\n      b(mv(2)-1)=0; \r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n%   b\r\n%   figure(1);imagesc(b,[0 12]);axis equal;\r\n  \r\n  if isempty(find(b==6,1))\r\n   % Game over : Blk captured White King\r\n   game_over=true;\r\n   if computer_wht==0 % Wht Computer King; Player is Blk captured Wht King\r\n    wins=wins+1;\r\n   end\r\n   continue\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n   % Check for 3 position repetition\r\n   for i=1:no_capture-1\r\n    cdelta=0;\r\n    for j=i+1:no_capture\r\n     delta=(b_hist(i,:,:)-b_hist(j,:,:));\r\n     if sum(abs(delta(:)))==0\r\n      cdelta=cdelta+1;\r\n     end\r\n    end\r\n    if cdelta\u003e=7 % repetitions 3 identical setups\r\n     fprintf('Game over due to repetition\\n');\r\n     game_over=true;\r\n    end\r\n   end % rep check loop \r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n\r\npmvout2=pmv;\r\nwins\r\n \r\n% Player must win Twice to Pass\r\ntoc\r\nassert(isequal(wins,2))\r\n\r\n%%\r\nglobal pmvout1 pmvout2\r\n% Output moves for games\r\n\r\n% Output game 2 moves\r\npmv=pmvout1;\r\n   for i=2:3:size(pmv,1)-3\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n   end\r\n   fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end,:));\r\n \r\n% Output game 2 moves\r\npmv=pmvout2;\r\n for i=2:3:size(pmv,1)-3\r\n  fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n  end\r\n% repeat of moves\r\n fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end,:));","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2012-12-27T22:34:39.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-24T02:22:59.000Z","updated_at":"2025-02-01T14:24:16.000Z","published_at":"2012-05-24T04:50:47.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/w:t\u003e\u003c/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\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \\\"a4\\\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 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\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/w:t\u003e\u003c/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 (b,pmv,castle)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/w:t\u003e\u003c/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\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/w:t\u003e\u003c/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\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/w:t\u003e\u003c/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\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 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: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 mv [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/w:t\u003e\u003c/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 Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/w:t\u003e\u003c/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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player must Win both games\u003c/w:t\u003e\u003c/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\u003eEvolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/w:t\u003e\u003c/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\u003eChezz_000: Makes no moves or captures - The weakest player possible\u003c/w:t\u003e\u003c/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\u003eLinks updated 12/27/12\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":44970,"title":"SAY 'OHYEAH'","description":"Regardless of input, output the string 'OHYEAH'.","description_html":"\u003cp\u003eRegardless of input, output the string 'OHYEAH'.\u003c/p\u003e","function_template":"function disp = wiferight(in)\r\n  disp='OHno';\r\nend","test_suite":"%%\r\nx = 'But I''m actually right this time';\r\ny_correct = 'OHYEAH';\r\nassert(isequal(wiferight(x),y_correct))\t\r\n%%\r\nx = 'But you just said that 2+2=3';\r\ny_correct = 'OHYEAH';\r\nassert(isequal(wiferight(x),y_correct))\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":346112,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":47,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2019-09-27T14:27:15.000Z","updated_at":"2026-02-16T16:45:48.000Z","published_at":"2019-09-27T14:27:15.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\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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\u003eRegardless of input, output the string 'OHYEAH'.\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":2935,"title":"y equals x divided by 2","description":"function y = x/2","description_html":"\u003cp\u003efunction y = x/2\u003c/p\u003e","function_template":"function y = your_fcn_name(x)\r\n  y = x;\r\nend","test_suite":"%%\r\nx = 1;\r\ny_correct = .5;\r\n\r\nassert(isequal(your_fcn_name(x),y_correct))\r\n","published":true,"deleted":false,"likes_count":8,"comments_count":0,"created_by":34012,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":542,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-02-03T22:34:15.000Z","updated_at":"2026-02-18T11:17:29.000Z","published_at":"2015-02-03T22:34:17.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\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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\u003efunction y = x/2\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":701,"title":"Play Tic-Tac-Toe: Easy Bots","description":"Interactive Tic-Tac-Toe game versus the test suite algorithms.\r\n\r\nThe contest will be 50 games of Computer first and 50 games of Player first.\r\n\r\nThe tic-tac-bots are not strong and are named Up, Down, and Random.\r\n\r\nInitial board is zeros(3).\r\nComputer moves are 1s and Player moves are 2s.\r\n\r\nPlayer output is an integer 1:9 to identify array position\r\n\r\n1 4 7\r\n\r\n2 5 8\r\n\r\n3 6 9\r\n\r\nExamples:\r\n\r\nInput: [1 0 0;0 0 0;0 0 0]  % Computer first case\r\n\r\nOutput: 5\r\n\r\nYields : [1 0 0; 0 2 0;0 0 0] with computer then picking position 2.\r\n\r\nSecond Input: [1 0 0;1 2 0;0 0 0] with computer's second move shown\r\n\r\n.\r\n\r\nPassing Score is 66 Wins out of 100 games.\r\n\r\nIt may be possible to score 100 Wins against the tic-tac-bots.\r\n\r\nYour Total Wins will be displayed.\r\n\r\nA follow-on problem will be 100 Tic-Tac-Toe Games: Never Lose Challenge\r\n\r\n","description_html":"\u003cp\u003eInteractive Tic-Tac-Toe game versus the test suite algorithms.\u003c/p\u003e\u003cp\u003eThe contest will be 50 games of Computer first and 50 games of Player first.\u003c/p\u003e\u003cp\u003eThe tic-tac-bots are not strong and are named Up, Down, and Random.\u003c/p\u003e\u003cp\u003eInitial board is zeros(3).\r\nComputer moves are 1s and Player moves are 2s.\u003c/p\u003e\u003cp\u003ePlayer output is an integer 1:9 to identify array position\u003c/p\u003e\u003cp\u003e1 4 7\u003c/p\u003e\u003cp\u003e2 5 8\u003c/p\u003e\u003cp\u003e3 6 9\u003c/p\u003e\u003cp\u003eExamples:\u003c/p\u003e\u003cp\u003eInput: [1 0 0;0 0 0;0 0 0]  % Computer first case\u003c/p\u003e\u003cp\u003eOutput: 5\u003c/p\u003e\u003cp\u003eYields : [1 0 0; 0 2 0;0 0 0] with computer then picking position 2.\u003c/p\u003e\u003cp\u003eSecond Input: [1 0 0;1 2 0;0 0 0] with computer's second move shown\u003c/p\u003e\u003cp\u003e.\u003c/p\u003e\u003cp\u003ePassing Score is 66 Wins out of 100 games.\u003c/p\u003e\u003cp\u003eIt may be possible to score 100 Wins against the tic-tac-bots.\u003c/p\u003e\u003cp\u003eYour Total Wins will be displayed.\u003c/p\u003e\u003cp\u003eA follow-on problem will be 100 Tic-Tac-Toe Games: Never Lose Challenge\u003c/p\u003e","function_template":"function p = tic_tac_toe(x)\r\n  p = 1;\r\nend","test_suite":"%%\r\n%Tic-Tac-Toe \r\n%Demonstration of Multi-Call with adaptive response\r\n\r\nwins=0;\r\nPass=0;\r\nfor i=1:50 % Computer First;  51-100 will be Player First\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n  if i\u003c16 % Up bot\r\n   p=find(x==0,1);\r\n  elseif i\u003c31 % Down bot\r\n   p=find(x==0,1,'last');\r\n  else % 31 thru 50 % random bot\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n  end\r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win,break;end % Computer Wins on its move\r\n  \r\n  % Draw check Post computer move (9th move)\r\n  if sum(x(:))\u003e=13,break;end\r\n  \r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  p=p(1);\r\n  if x(p)~=0,break;end % Invalid move - Game over\r\n  x(p)=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move\r\n  \r\n  \r\n end % gameover while 1:50\r\nend % Games 1:50\r\n\r\n% Output wins against Computer first\r\nwins\r\n\r\nfor i=51:100 % Player First;  51-100 Player First\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  p=p(1);\r\n  if x(p)~=0,break;end % Invalid move - Game over\r\n  x(p)=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move   \r\n  \r\n  % Draw check Post computer move (9th move)\r\n  if sum(x(:))\u003e=13,break;end\r\n     \r\n  if i\u003c66 % Up bot\r\n   p=find(x==0,1);\r\n  elseif i\u003c81 % Down bot\r\n   p=find(x==0,1,'last');\r\n  else % 31 thru 50 % random bot\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n  end\r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win,break;end % Computer Wins on its move\r\n   \r\n end % gameover while 51:100\r\nend % Games 51:100\r\n\r\nwins\r\n\r\nif wins\u003e65,Pass=1;end\r\nassert(isequal(Pass,1))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":24,"test_suite_updated_at":"2012-06-03T19:49:30.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-19T15:10:18.000Z","updated_at":"2026-01-03T17:04:22.000Z","published_at":"2012-05-19T16:47:46.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"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\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\u003eInteractive Tic-Tac-Toe game versus the test suite 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe contest will be 50 games of Computer first and 50 games of Player first.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe tic-tac-bots are not strong and are named Up, Down, and Random.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer output is an integer 1:9 to identify array position\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1 4 7\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2 5 8\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3 6 9\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExamples:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eInput: [1 0 0;0 0 0;0 0 0] % Computer first case\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOutput: 5\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYields : [1 0 0; 0 2 0;0 0 0] with computer then picking position 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eSecond Input: [1 0 0;1 2 0;0 0 0] with computer's second move shown\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePassing Score is 66 Wins out of 100 games.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt may be possible to score 100 Wins against the tic-tac-bots.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour Total Wins will be displayed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA follow-on problem will be 100 Tic-Tac-Toe Games: Never Lose Challenge\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":52323,"title":"Guess the number I'm thinking of (Part 2)","description":"Have you tried the original \"Guess the number I'm thinking of\" (Problem 44630)?  This problem is just like that, except that the range of possible numbers can change, and pre-calculated answers are explicitly disallowed.  Computing all possible permutations on the fly is not disallowed per se, but it is discouraged due to the high computational load involved.  \r\nIn this game you are competing against two other people to guess the number that I'm thinking of.\r\nI randomly choose an integer between one and N (inclusive).  N is an integer between 4 and 1000 (inclusive) that will be specified in each test as upperLimit.  I don't provide any other clues about the number that is to be guessed.\r\nYour first opponent tries to guess the number.  They guess randomly.\r\nYour second opponent tries to guess the number.  They also guess randomly.\r\nYou try to guess the number.  But you guess strategically.\r\nThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number.  This represents a \"win\".\r\nIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\".  (It is a loss for the remaining contestant.)  A draw is worth half as much as a win.\r\nEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector guessesOfOpponents).  Moreover, each guess must be unique.\r\nIf everyone guessed randomly, each person should have an equal chance of winning.\r\nIt might seem that you're at a disadvantage, having the last opportunity to guess.  But actually you have the advantage of extra knowledge.\r\nBy guessing strategically, you should be able to achieve a \"success rate\" of substantially better than 33.3%.  The success rate is defined as follows.  \r\nsuccess rate = (wins + draws/2) / games\r\nThe precise value of the expected success rate (when guessing with the optimal strategy) depends upon the value of N:  when N = 4 you should be able to achieve a success rate of 17/48 ≈ 35.4% on average, increasing monotonically to above 50% for N ≥ 24, eventually approaching an asymptote of 19/36 ≈ 52.8%.  (See the Test Suite for details of the thresholds applied.) \r\n\r\nRELATED PROBLEM:  \r\nProblem 44630. Guess the number I'm thinking of (Part 1)","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 691px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 345.5px; transform-origin: 407px 345.5px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 31.5px; text-align: left; transform-origin: 384px 31.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eHave you tried the original \u003c/span\u003e\u003c/span\u003e\u003ca target='_blank' href = \"https://au.mathworks.com/matlabcentral/cody/problems/44630-guess-the-number-i-m-thinking-of\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"font-style: italic; \"\u003e\"Guess the number I'm thinking of\" (Problem 44630)\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e?  This problem is just like that, except that the range of possible numbers can change, and pre-calculated answers are explicitly disallowed.  Computing all possible permutations on the fly is not disallowed per se, but it is discouraged due to the high computational load involved.  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003col style=\"block-size: 181px; font-family: Helvetica, Arial, sans-serif; list-style-type: decimal; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 90.5px; transform-origin: 391px 90.5px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 41px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20.5px; text-align: left; transform-origin: 363px 20.5px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eI randomly choose an\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003einteger\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e between\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eone\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e (inclusive).  \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e is an integer between 4 and 1000 (inclusive) that will be specified in each test as \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eupperLimit\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.  I don't provide any other clues about the number that is to be guessed.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour first opponent tries to guess the number.  They guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour second opponent tries to guess the number.  They also guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYou try to guess the number.  But you guess\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estrategically\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number.  This represents a \"win\".\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\".  (It is a loss for the remaining contestant.)  A draw is worth half as much as a win.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eguessesOfOpponents\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e).  Moreover, each guess must be unique.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess.  But actually you have the advantage of extra knowledge.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eBy guessing strategically, you should be able to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eachieve a \"success rate\" of substantially better than 33.3%\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.  The success rate is defined as follows.  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003esuccess rate = (wins + draws/2) / games\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 42px; text-align: left; transform-origin: 384px 42px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe precise value of the expected success rate (when guessing with the optimal strategy) depends upon the value of \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e:  when \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e = 4 you should be able to achieve a success rate of 17/48 ≈ 35.4% on average, increasing monotonically to above 50% for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e ≥ 24, eventually approaching an asymptote of 19/36 ≈ 52.8%.  (See the Test Suite for details of the thresholds applied.) \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eRELATED PROBLEM:  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 10px; transform-origin: 391px 10px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/44630\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 44630. Guess the number I'm thinking of (Part 1)\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = myGuess(upperLimit, guessesOfOpponents)\r\n    y = 42;\r\nend","test_suite":"%% Anti-hacking test.\r\nassessFunctionAbsence({'rng', 'RandStream'}, 'FileName','myGuess.m')\r\n\r\n%% Anti-precalculation test.\r\n% Do not try to get evade the test.  Just follow the clear rule:  DO NOT PRECALCULATE.\r\nassessFunctionAbsence({'sub2ind', 'str2num'}, 'FileName','myGuess.m')\r\n\r\n% And while we're at it, I dislike the practice of using \"ans\" in a script.  \r\nassessFunctionAbsence({'ans'}, 'FileName','myGuess.m')\r\n\r\n% And you don't really need regexp or regexpi eithr.\r\nassessFunctionAbsence({'regexp', 'regexpi'}, 'FileName','myGuess.m')\r\n\r\n%% Ensure unique guesses of integers, which are in-range.\r\nfor j = 1 : 1000\r\n    upperLim = randi([4, 1000]);\r\n    numberToBeGuessed = randi(upperLim);\r\n    gOO = randperm(upperLim, 2);\r\n    mG = myGuess(upperLim, gOO);\r\n    assert( mG \u003e= 1  \u0026  mG \u003c= upperLim , 'Out of requested range.' )\r\n    u = unique( floor([gOO mG]) );\r\n    assert( length(u) == 3 , 'Your guess must not have been already chosen.' )\r\nend;\r\n\r\n%% Check the success rate several times for various values of N.\r\nmaxIts = 50000;    % maxIts: 20000 = Too small; 30000 = Not quite big enough; 35000 = Just big enough (usually!); 50000 = Big enough (usually!); 100000 = Big enough, plus safety margin \u0026 efficiency incentive (but waste of resources)\r\ntic\r\nfor j = 1 : 12\r\n%for j = 5 : 20 : 1000\r\n    %upperLim = 3 + j;\r\n    if j \u003c= 4,\r\n        % Focus on smaller N.\r\n        upperLim = randi([4, 10]);\r\n    elseif j \u003c= 8,\r\n        % Focus on intermediate N.\r\n        upperLim = randi([11, 40]);\r\n    else\r\n        % Focus on larger N.\r\n        upperLim = randi([41, 1000]);\r\n    end;\r\n    WDL = [0 0 0];\r\n    for itn = 1 : maxIts\r\n        numberToBeGuessed = randi(upperLim);\r\n        gOO = randperm(upperLim, 2);\r\n        diffs = abs( [gOO myGuess(upperLim, gOO)] - numberToBeGuessed );\r\n        winningContestant = find( min(diffs)==diffs );\r\n        if any( winningContestant == 3 ),\r\n            if length(winningContestant) == 1,\r\n                % Win\r\n                WDL(1) = WDL(1) + 1;  \r\n            else\r\n                % Draw\r\n                WDL(2) = WDL(2) + 1;  \r\n            end;\r\n        else\r\n            % Loss\r\n            WDL(3) = WDL(3) + 1;  \r\n        end;\r\n    end;\r\n    successRate = (WDL(1) + WDL(2)/2) / maxIts;\r\n    minAcceptableSuccessRate = getCutoff(upperLim);\r\n    %[upperLim minAcceptableSuccessRate successRate]\r\n    fprintf('N = %u, Threshold = %5.2f %c, Success rate = %5.2f %c.\\r\\n', upperLim, minAcceptableSuccessRate*100, '%', successRate*100, '%');\r\n    assert( successRate \u003e= minAcceptableSuccessRate )\r\nend;\r\ntoc\r\n\r\n% Define the minimum success rate that must be achieved.  \r\n% Note:  functions must be defined at the end of a script.  See https://au.mathworks.com/help/matlab/ref/function.html?s_tid=doc_ta#description\r\nfunction threshold = getCutoff(N)\r\n    % The success rate as a function of N is fit quite well \r\n    % by an equation of the form  s = sInf – A / N^k\r\n    expectedSuccessRate = 0.527353226 - 0.740005 / N^1.050420528;   \r\n    % (From fitting 310 points recorded to four decimal places.  \r\n    % The coefficients appear to be accurate to at least 3 significant figures.)  \r\n\r\n    % However, practically speaking we need to include a safety margin\r\n    % to avoid failing correct solutions on account of stochastic fluctuations.  \r\n    % A safety margin of 1 percentage point is almost always enough.  \r\n    % (1.5 percentage points would allow even more natural fluctuation, but would also risk passing incorrect 'solutions'.)  \r\n    threshold = expectedSuccessRate - 0.010;\r\nend","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":4,"test_suite_updated_at":"2021-07-19T10:43:08.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2021-07-18T11:23:40.000Z","updated_at":"2021-07-25T08:12:28.000Z","published_at":"2021-07-18T15:01:47.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eHave you tried the original \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://au.mathworks.com/matlabcentral/cody/problems/44630-guess-the-number-i-m-thinking-of\\\"\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\\\"Guess the number I'm thinking of\\\" (Problem 44630)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e?  This problem is just like that, except that the range of possible numbers can change, and pre-calculated answers are explicitly disallowed.  Computing all possible permutations on the fly is not disallowed per se, but it is discouraged due to the high computational load involved.  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eI randomly choose 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003einteger\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e between\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\u003eone\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:b/\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 (inclusive).  \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\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is an integer between 4 and 1000 (inclusive) that will be specified in each test as \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\u003eupperLimit\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e.  I don't provide any other clues about the number that is to be guessed.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour first opponent tries to guess the number.  They guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour second opponent tries to guess the number.  They also guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou try to guess the number.  But you guess\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\u003estrategically\u003c/w:t\u003e\u003c/w:r\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number.  This represents a \\\"win\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \\\"draw\\\".  (It is a loss for the remaining contestant.)  A draw is worth half as much as a win.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\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\u003eguessesOfOpponents\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e).  Moreover, each guess must be unique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess.  But actually you have the advantage of extra knowledge.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBy guessing strategically, you should be able to\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\u003eachieve a \\\"success rate\\\" of substantially better than 33.3%\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e.  The success rate is defined as follows.  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003esuccess rate = (wins + draws/2) / games\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe precise value of the expected success rate (when guessing with the optimal strategy) depends upon the value of \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:  when \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 = 4 you should be able to achieve a success rate of 17/48 ≈ 35.4% on average, increasing monotonically to above 50% for \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 ≥ 24, eventually approaching an asymptote of 19/36 ≈ 52.8%.  (See the Test Suite for details of the thresholds applied.) \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRELATED PROBLEM:  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44630\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 44630. Guess the number I'm thinking of (Part 1)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\"}]}"},{"id":772,"title":"TRON Tourney 000 : Clockwise Wall Hugger","description":"TRON Tournament is based upon the excellent TRON Challenge, \u003chttp://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge Cody 327\u003e, created by Alfonso Nieto-Castanon.\r\n\r\nI will implement, as practical, winning Player TRON-bots as Host TRON-bots.\r\n\r\nThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\r\n\r\nThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\r\n\r\nThe Host TRON-bot will be provided in the function template.\r\nIt is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\r\n\r\nThe TRON arena is fixed at 50x50.\r\n\r\nPlease visit the Cody 327 link for any info I may miss.\r\n\r\n\r\nBoard: 50x50\r\n\r\nWall: -3 (Rows 1 and 50, Columns 1 and 50)\r\n\r\nPlayer: 1\r\n\r\nHost: 2\r\n\r\nPlayer created wall: -1\r\n\r\nHost created wall: -2\r\n\r\n\r\nEmpty Spaces: 0\r\n\r\nPlayers start on either row 2 or column 2\r\n\r\nPlayers move simultaneously and thus a crash to the same spot is a tie.\r\n\r\nRunning into walls is a loss. \r\n\r\nSimultaneous wall crashing is a tie.\r\n\r\nGiven the board with its coverage make a Move, \"NESW\".\r\n\r\n\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\r\n\r\n*Input:* Board\r\n\r\n*Output:* (string 1 character) eg \"N\"\r\n\r\n*Score:* Perfect Score is 0 points (200-Wins*2-Ties/2)\r\n\r\nThe Test Suite has some very nice methods to implement checks.\r\n\r\nBot 000 is Alfonso's Clockwise Exterior Wall Hugger\r\n","description_html":"\u003cp\u003eTRON Tournament is based upon the excellent TRON Challenge, \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\"\u003eCody 327\u003c/a\u003e, created by Alfonso Nieto-Castanon.\u003c/p\u003e\u003cp\u003eI will implement, as practical, winning Player TRON-bots as Host TRON-bots.\u003c/p\u003e\u003cp\u003eThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\u003c/p\u003e\u003cp\u003eThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\u003c/p\u003e\u003cp\u003eThe Host TRON-bot will be provided in the function template.\r\nIt is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/p\u003e\u003cp\u003eThe TRON arena is fixed at 50x50.\u003c/p\u003e\u003cp\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/p\u003e\u003cp\u003eBoard: 50x50\u003c/p\u003e\u003cp\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/p\u003e\u003cp\u003ePlayer: 1\u003c/p\u003e\u003cp\u003eHost: 2\u003c/p\u003e\u003cp\u003ePlayer created wall: -1\u003c/p\u003e\u003cp\u003eHost created wall: -2\u003c/p\u003e\u003cp\u003eEmpty Spaces: 0\u003c/p\u003e\u003cp\u003ePlayers start on either row 2 or column 2\u003c/p\u003e\u003cp\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/p\u003e\u003cp\u003eRunning into walls is a loss.\u003c/p\u003e\u003cp\u003eSimultaneous wall crashing is a tie.\u003c/p\u003e\u003cp\u003eGiven the board with its coverage make a Move, \"NESW\".\u003c/p\u003e\u003cp\u003e\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Board\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e (string 1 character) eg \"N\"\u003c/p\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Perfect Score is 0 points (200-Wins*2-Ties/2)\u003c/p\u003e\u003cp\u003eThe Test Suite has some very nice methods to implement checks.\u003c/p\u003e\u003cp\u003eBot 000 is Alfonso's Clockwise Exterior Wall Hugger\u003c/p\u003e","function_template":"function move=tron(board)\r\n% Creator: Alfonso Nieto-Castanon\r\n% Botname: Base Clockwise Wall Hugger\r\n% Date: Early 2012\r\n% This is the Host bot of TRON Tourney 000\r\n str='NESW';\r\n D=[-1,50,1,-50];\r\n i=find(board==2); \r\n [nill,j]=max(~board(i+D)+.5*(board(i-D)==-2));\r\n move=str(j);\r\nend","test_suite":"%%\r\n% Core Code based upon TRON Cody 327 by Alfonso Nieto-Castanon\r\n% Tweaked to have 50 paired matches that swap starting positions\r\n% Passing Criteria modified to W-Ties/4 \u003e Losses\r\n% 10% of all matches against perfect bot are guaranteed losses\r\nglobal scr\r\n\r\n  doDraw=false; %set to true for display\r\n  %doDraw=true; %set to true for display\r\n  params=struct('n',50,'str','NESW','D',[-1,50,1,-50],'wins',[0,0,0]);\r\n   \r\n  y=clock;\r\n  rand('state',10000*y(6)); \r\n % rand('state',0); % Modify to make non-repeating\r\n  for nboards=1:50 \r\n      % initialize board\r\n      params.board=zeros(params.n);\r\n      params.board([1,end],:)=-3;\r\n      params.board(:,[1,end])=-3;\r\n      [i,j]=find(params.board|1); % creates idx  to [r,c] via magic\r\n      [nill,pos1]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos1)=1;\r\n      [nill,pos2]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos2)=2;\r\n      orig_pos1=pos1;\r\n      orig_pos2=pos2;\r\n   for game=1:2 \r\n       \r\n       if game==2 % Play reversed starting positions\r\n        params.board=zeros(params.n);\r\n        params.board([1,end],:)=-3;\r\n        params.board(:,[1,end])=-3;\r\n        pos1=orig_pos2;\r\n        pos2=orig_pos1;\r\n        params.board(pos1)=1;\r\n        params.board(pos2)=2;\r\n       end\r\n      \r\n      while 1\r\n          % blue's next movement\r\n          params.state=rand('state');\r\n          assignin('caller','params',params);\r\n       try   \r\n        d1=tron(params.board); % Player Move\r\n       catch\r\n        d1='S'; % Move S on error\r\n       end\r\n          \r\n          params=evalin('caller','params');\r\n          rand('state',params.state);\r\n          \r\n          \r\n          % red's next movement\r\n          i=find(params.board==2);\r\n          [nill,j]=max(~params.board(i+params.D)+.5*(params.board(i-params.D)==-2));\r\n          d2=params.str(j);\r\n       \r\n\r\n          % evaluate movements\r\n          d1=findstr(params.str,d1);\r\n          d2=findstr(params.str,d2);\r\n          \r\n          assert(~isempty(d1));          \r\n          params.board(pos1)=-1;\r\n          params.board(pos2)=-2;\r\n          pos1=pos1+params.D(d1);\r\n          pos2=pos2+params.D(d2);\r\n          if pos1==pos2||(params.board(pos1)\u0026\u0026params.board(pos2)), %tie\r\n              params.wins(2)=params.wins(2)+1;\r\n              if doDraw, disp('tie'); end\r\n              break;\r\n          elseif params.board(pos1), %lose\r\n              if doDraw, disp('lose'); end\r\n              %pause(0.5)\r\n              params.wins(3)=params.wins(3)+1;\r\n              break;\r\n          elseif params.board(pos2), %win\r\n              if doDraw, disp('win'); end\r\n              params.wins(1)=params.wins(1)+1;\r\n              break;\r\n          end\r\n          params.board(pos1)=1;\r\n          params.board(pos2)=2;\r\n          if doDraw\r\n              image(4+params.board);\r\n              axis equal off;\r\n              colormap([1,1,1;.5,0,0;0,0,.5;0,0,0;0,0,1;1,0,0]);\r\n              set(gcf,'color','k');\r\n              drawnow;\r\n          end\r\n      end\r\n      if doDraw, pause; end\r\n      \r\n   end % game\r\n  end % nboards\r\n    \r\n  disp(sprintf('%d wins; %d ties; %d losses',params.wins));\r\n\r\n% Make the size equal to 2*score\r\nscr=max(0,100-params.wins(1)-params.wins(2)/4);\r\n\r\n\r\n% W-T/4 \u003e Losses to Pass\r\nassert(params.wins(1)-params.wins(2)/4\u003eparams.wins(3),sprintf('%d wins; %d ties; %d losses',params.wins));\r\n\r\n%fh=fopen('tron.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,floor(scr)]) );\r\n%fclose(fh);\r\n%%\r\nglobal scr\r\n\r\nfeval(@assignin,'caller','score',floor(2*scr));\r\n\r\n%fh=fopen('tron.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,floor(scr)]) );\r\n%fclose(fh);\r\n","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2012-11-24T16:01:31.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-17T02:35:05.000Z","updated_at":"2012-11-24T16:01:31.000Z","published_at":"2012-06-17T04:05:26.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\u003eTRON Tournament is based upon the excellent TRON Challenge,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody 327\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, created by Alfonso Nieto-Castanon.\u003c/w:t\u003e\u003c/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\u003eI will implement, as practical, winning Player TRON-bots as Host TRON-bots.\u003c/w:t\u003e\u003c/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 Passing criteria is changed to Wins - Ties/4 \u0026gt; Losses.\u003c/w:t\u003e\u003c/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 100 Matches will be \\\"even\\\" as Host and Player will play the same 50 paired starting positions.\u003c/w:t\u003e\u003c/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 Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/w:t\u003e\u003c/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 TRON arena is fixed at 50x50.\u003c/w:t\u003e\u003c/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\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/w:t\u003e\u003c/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\u003eBoard: 50x50\u003c/w:t\u003e\u003c/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\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer: 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:t\u003eHost: 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\u003ePlayer created wall: -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:t\u003eHost created wall: -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\u003eEmpty Spaces: 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\u003ePlayers start on either row 2 or column 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\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/w:t\u003e\u003c/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\u003eRunning into walls is a loss.\u003c/w:t\u003e\u003c/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\u003eSimultaneous wall crashing is a tie.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the board with its coverage make a Move, \\\"NESW\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\"N\\\" idx-1; \\\"E\\\" idx+50, \\\"S\\\" idx+1, and \\\"W\\\" is idx-50.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Board\u003c/w:t\u003e\u003c/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 (string 1 character) eg \\\"N\\\"\u003c/w:t\u003e\u003c/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\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Perfect Score is 0 points (200-Wins*2-Ties/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\u003eThe Test Suite has some very nice methods to implement checks.\u003c/w:t\u003e\u003c/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\u003eBot 000 is Alfonso's Clockwise Exterior Wall Hugger\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":773,"title":"TRON Tourney 010: Fixed Pattern CCW","description":"TRON Tournament is based upon the excellent TRON Challenge, \u003chttp://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge Cody 327\u003e, created by Alfonso Nieto-Castanon.\r\n\r\nHost Bot: Fixed Pattern CCW - Weak \r\n\r\nThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\r\n\r\nThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\r\n\r\nThe Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\r\n\r\nThe TRON arena is fixed at 50x50.\r\n\r\nPlease visit the Cody 327 link for any info I may miss.\r\n\r\nBoard: 50x50\r\n\r\nWall: -3 (Rows 1 and 50, Columns 1 and 50)\r\n\r\nPlayer: 1\r\n\r\nHost: 2\r\n\r\nPlayer created wall: -1\r\n\r\nHost created wall: -2\r\n\r\nEmpty Spaces: 0\r\n\r\nPlayers start on either row 2 or column 2\r\n\r\nPlayers move simultaneously and thus a crash to the same spot is a tie.\r\n\r\nRunning into a wall first is a loss.\r\n\r\nSimultaneous wall crashing is a tie.\r\n\r\nGiven the board with its coverage make a Move, \"NESW\".\r\n\r\n\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\r\n\r\n*Input:* Board\r\n\r\n*Output:* (string 1 character) eg \"N\"\r\n\r\n*Score:* Perfect Score is 0 points (200-Wins*2-Ties/2), 100 L scores 200\r\n\r\nThe Test Suite has some very nice methods to implement checks.\r\n\r\nBot 010 is Rick's CCW Fixed Pattern Bot - Weak","description_html":"\u003cp\u003eTRON Tournament is based upon the excellent TRON Challenge, \u003ca href=\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\"\u003eCody 327\u003c/a\u003e, created by Alfonso Nieto-Castanon.\u003c/p\u003e\u003cp\u003eHost Bot: Fixed Pattern CCW - Weak\u003c/p\u003e\u003cp\u003eThe Passing criteria is changed to Wins - Ties/4 \u003e Losses.\u003c/p\u003e\u003cp\u003eThe 100 Matches will be \"even\" as Host and Player will play the same 50 paired starting positions.\u003c/p\u003e\u003cp\u003eThe Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/p\u003e\u003cp\u003eThe TRON arena is fixed at 50x50.\u003c/p\u003e\u003cp\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/p\u003e\u003cp\u003eBoard: 50x50\u003c/p\u003e\u003cp\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/p\u003e\u003cp\u003ePlayer: 1\u003c/p\u003e\u003cp\u003eHost: 2\u003c/p\u003e\u003cp\u003ePlayer created wall: -1\u003c/p\u003e\u003cp\u003eHost created wall: -2\u003c/p\u003e\u003cp\u003eEmpty Spaces: 0\u003c/p\u003e\u003cp\u003ePlayers start on either row 2 or column 2\u003c/p\u003e\u003cp\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/p\u003e\u003cp\u003eRunning into a wall first is a loss.\u003c/p\u003e\u003cp\u003eSimultaneous wall crashing is a tie.\u003c/p\u003e\u003cp\u003eGiven the board with its coverage make a Move, \"NESW\".\u003c/p\u003e\u003cp\u003e\"N\" idx-1; \"E\" idx+50, \"S\" idx+1, and \"W\" is idx-50.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Board\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e (string 1 character) eg \"N\"\u003c/p\u003e\u003cp\u003e\u003cb\u003eScore:\u003c/b\u003e Perfect Score is 0 points (200-Wins*2-Ties/2), 100 L scores 200\u003c/p\u003e\u003cp\u003eThe Test Suite has some very nice methods to implement checks.\u003c/p\u003e\u003cp\u003eBot 010 is Rick's CCW Fixed Pattern Bot - Weak\u003c/p\u003e","function_template":"function move=tron(board)\r\n% Creator: Richard Zapor\r\n% BotName: Map50 vs Clockwise Bot\r\n% Fixed Pattern Bot - Very Weak but Crushes CW Wall Hugger\r\n% Date: 6/8/2012\r\n  str='NESW';\r\n  map50=str2num('reshape([ones(1,101)*2 ones(1,46)*3 2 2 zeros(1,2202) 3 4 4 ones(1,47) 3 4 zeros(1,97)],50,50)+(reshape([zeros(1,53) ones(1,44)*3 zeros(1,6) ones(1,44)*4 zeros(1,6) 3 ones(1,43)*4 zeros(1,6) ones(1,43)*2 3 zeros(1,2106) ones(1,44)*2 zeros(1,6) ones(1,44)*2 zeros(1,53)],50,50))''');\r\n  try\r\n   move=str(map50(find(board==1)));  \r\n  catch\r\n   move='S';\r\n  end\r\nend","test_suite":"% Passing Criteria modified to W-Ties/4 \u003e Losses\r\n% 10% of all matches against perfect bot are guaranteed losses\r\nglobal scr\r\n\r\n  doDraw=false; %set to true for display\r\n  %doDraw=true; %set to true for display\r\n  params=struct('n',50,'str','NESW','D',[-1,50,1,-50],'wins',[0,0,0]);\r\n   \r\n  y=clock;\r\n  rand('state',10000*y(6)); \r\n  map50=str2num('reshape([ones(1,101)*2 ones(1,46)*3 2 2 zeros(1,2202) 3 4 4 ones(1,47) 3 4 zeros(1,97)],50,50)+(reshape([zeros(1,53) ones(1,44)*3 zeros(1,6) ones(1,44)*4 zeros(1,6) 3 ones(1,43)*4 zeros(1,6) ones(1,43)*2 3 zeros(1,2106) ones(1,44)*2 zeros(1,6) ones(1,44)*2 zeros(1,53)],50,50))''');\r\n % rand('state',0); % Modify to make non-repeating\r\n  for nboards=1:50 \r\n      % initialize board\r\n      params.board=zeros(params.n);\r\n      params.board([1,end],:)=-3;\r\n      params.board(:,[1,end])=-3;\r\n      [i,j]=find(params.board|1); % creates idx  to [r,c] via magic\r\n      [nill,pos1]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos1)=1;\r\n      [nill,pos2]=max((i==2|j==2)+~params.board(:)+rand(params.n*params.n,1));\r\n      params.board(pos2)=2;\r\n      orig_pos1=pos1;\r\n      orig_pos2=pos2;\r\n   for game=1:2 \r\n       \r\n       if game==2 % Play reversed starting positions\r\n        params.board=zeros(params.n);\r\n        params.board([1,end],:)=-3;\r\n        params.board(:,[1,end])=-3;\r\n        pos1=orig_pos2;\r\n        pos2=orig_pos1;\r\n        params.board(pos1)=1;\r\n        params.board(pos2)=2;\r\n       end\r\n      \r\n      while 1\r\n          % blue's next movement\r\n          params.state=rand('state');\r\n          assignin('caller','params',params);\r\n      try    \r\n        d1=tron(params.board); % Player Move\r\n      catch\r\n        d1='S';\r\n       end\r\n          \r\n          params=evalin('caller','params');\r\n          rand('state',params.state);\r\n          \r\n          \r\n          % red's next movement\r\n% Creator: Richard Zapor\r\n% BotName: Map50 vs Clockwise Bot\r\n% Date: 6/8/2012\r\n  str='NESW';\r\n%  map50=str2num('reshape([ones(1,101)*2 ones(1,46)*3 2 2 zeros(1,2202) 3 4 4 ones(1,47) 3 4 zeros(1,97)],50,50)+(reshape([zeros(1,53) ones(1,44)*3 zeros(1,6) ones(1,44)*4 zeros(1,6) 3 ones(1,43)*4 zeros(1,6) ones(1,43)*2 3 zeros(1,2106) ones(1,44)*2 zeros(1,6) ones(1,44)*2 zeros(1,53)],50,50))''');\r\n  try\r\n   move=str(map50(find(params.board==2)));  \r\n  catch\r\n   move='S';\r\n  end\r\n  d2=move;\r\n       \r\n\r\n          % evaluate movements\r\n          d1=findstr(params.str,d1);\r\n          d2=findstr(params.str,d2);\r\n          \r\n          assert(~isempty(d1));          \r\n          params.board(pos1)=-1;\r\n          params.board(pos2)=-2;\r\n          pos1=pos1+params.D(d1);\r\n          pos2=pos2+params.D(d2);\r\n          if pos1==pos2||(params.board(pos1)\u0026\u0026params.board(pos2)), %tie\r\n              params.wins(2)=params.wins(2)+1;\r\n              if doDraw, disp('tie'); end\r\n              break;\r\n          elseif params.board(pos1), %lose\r\n              if doDraw, disp('lose'); end\r\n              %pause(0.5)\r\n              params.wins(3)=params.wins(3)+1;\r\n              break;\r\n          elseif params.board(pos2), %win\r\n              if doDraw, disp('win'); end\r\n              params.wins(1)=params.wins(1)+1;\r\n              break;\r\n          end\r\n          params.board(pos1)=1;\r\n          params.board(pos2)=2;\r\n          if doDraw\r\n              image(4+params.board);\r\n              axis equal off;\r\n              colormap([1,1,1;.5,0,0;0,0,.5;0,0,0;0,0,1;1,0,0]);\r\n              set(gcf,'color','k');\r\n              drawnow;\r\n          end\r\n      end\r\n      if doDraw, pause; end\r\n      \r\n   end % game\r\n  end % nboards\r\n    \r\n  disp(sprintf('%d wins; %d ties; %d losses',params.wins));\r\n\r\n% Make the size equal to 100-W-T/4  Perfect=0, 100 L scores 200\r\nscr=100-params.wins(1)-params.wins(2)/4;\r\n\r\n\r\n% W-T/4 \u003e Losses to Pass\r\nassert(params.wins(1)-params.wins(2)/4\u003eparams.wins(3),sprintf('%d wins; %d ties; %d losses',params.wins));\r\n%%\r\n% Implement tron.m resizing to scr when assert W-T/4\u003eL  Fails\r\nglobal scr\r\n\r\nfeval(@assignin,'caller','score',floor(2*scr));\r\n\r\n%fh=fopen('tron.m','wt');\r\n%fprintf(fh,'%s\\n',repmat('1;',[1,floor(scr)]) );\r\n%fclose(fh);","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2012-11-24T15:58:19.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-06-18T00:51:07.000Z","updated_at":"2012-11-24T15:58:19.000Z","published_at":"2012-06-18T03:16:51.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\u003eTRON Tournament is based upon the excellent TRON Challenge,\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.mathworks.com/matlabcentral/cody/problems/327-tron-challenge\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCody 327\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, created by Alfonso Nieto-Castanon.\u003c/w:t\u003e\u003c/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\u003eHost Bot: Fixed Pattern CCW - Weak\u003c/w:t\u003e\u003c/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 Passing criteria is changed to Wins - Ties/4 \u0026gt; Losses.\u003c/w:t\u003e\u003c/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 100 Matches will be \\\"even\\\" as Host and Player will play the same 50 paired starting positions.\u003c/w:t\u003e\u003c/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 Host TRON-bot will be provided in the function template. It is highly recommend to run the initial TRON bot so that the player can copy the Test Suite for his bot creation. The Test Suite code has beautiful graphics created by Alfonso.\u003c/w:t\u003e\u003c/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 TRON arena is fixed at 50x50.\u003c/w:t\u003e\u003c/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\u003ePlease visit the Cody 327 link for any info I may miss.\u003c/w:t\u003e\u003c/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\u003eBoard: 50x50\u003c/w:t\u003e\u003c/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\u003eWall: -3 (Rows 1 and 50, Columns 1 and 50)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer: 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:t\u003eHost: 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\u003ePlayer created wall: -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:t\u003eHost created wall: -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\u003eEmpty Spaces: 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\u003ePlayers start on either row 2 or column 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\u003ePlayers move simultaneously and thus a crash to the same spot is a tie.\u003c/w:t\u003e\u003c/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\u003eRunning into a wall first is a loss.\u003c/w:t\u003e\u003c/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\u003eSimultaneous wall crashing is a tie.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the board with its coverage make a Move, \\\"NESW\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\"N\\\" idx-1; \\\"E\\\" idx+50, \\\"S\\\" idx+1, and \\\"W\\\" is idx-50.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Board\u003c/w:t\u003e\u003c/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 (string 1 character) eg \\\"N\\\"\u003c/w:t\u003e\u003c/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\u003eScore:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Perfect Score is 0 points (200-Wins*2-Ties/2), 100 L scores 200\u003c/w:t\u003e\u003c/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 Test Suite has some very nice methods to implement checks.\u003c/w:t\u003e\u003c/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\u003eBot 010 is Rick's CCW Fixed Pattern Bot - Weak\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":44728,"title":"Nash Equilibrium","description":"In game theory, a player's *strategy* is any of the options that can be chosen in a setting where the pay-off depends not only on the player's action but on the action of every player. \r\n\r\nConsider two prisoners held in separate cells, interrogated simultaneously, and offered deals (lighter jail sentences) for betraying their fellow criminal. The prisoner's strategy can either be to \"cooperate\" or \"defect\".\r\n\r\n   Prisoner 1, Prisoner 2  | Co-operate (with other)  |  Defect (betray other)\r\n  _____________________________________________________________________________\r\n   Co-operate (with other) |           1 , 1          |         4 , 0\r\n   Defect (betray other)   |           0 , 4          |         2 , 2\r\n\r\nA *strategy profile* is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player. In the case of the prisoners, there are four possible strategy profile as shown in the table cells above. \r\n\r\n\r\nA *pay-off* is usually associated with every strategy profile. In the case of the prisoners, if they both co-operate, they both get a pay-off (prison sentence) of 1 year.\r\n\r\nA strategy profile is a *Nash equilibrium* if no player can do better by unilaterally changing only his or her strategy. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.\r\n\r\nThe Nash equilibrium depends on if the objective is to minimize or maximize the pay-off matrix:\r\n\r\nIf the players intend to minimize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to defect. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets a higher prison sentence of 4 years. \r\n\r\nIf the players intend to maximize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to co-operate. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets to walk free. \r\n\r\nFor a given two-player game with each player having n strategies, the pay-off matrix P is given as a _n x n_ cell array, which elements specifies a strategy profile and the corresponding pay-offs. In the case of the prisoners\r\n\r\n       P =  {[1, 1]  [4, 0];\r\n             [0, 4]  [2, 2]} \r\n\r\nGiven the pay-off matrix P and an objective (min or max), return the 2D index of all the Nash equilibria (i.e. the strategy profile) in a k x 2 matrix and the corresponding pay-off in a column cell array.\r\n","description_html":"\u003cp\u003eIn game theory, a player's \u003cb\u003estrategy\u003c/b\u003e is any of the options that can be chosen in a setting where the pay-off depends not only on the player's action but on the action of every player.\u003c/p\u003e\u003cp\u003eConsider two prisoners held in separate cells, interrogated simultaneously, and offered deals (lighter jail sentences) for betraying their fellow criminal. The prisoner's strategy can either be to \"cooperate\" or \"defect\".\u003c/p\u003e\u003cpre\u003e   Prisoner 1, Prisoner 2  | Co-operate (with other)  |  Defect (betray other)\r\n  _____________________________________________________________________________\r\n   Co-operate (with other) |           1 , 1          |         4 , 0\r\n   Defect (betray other)   |           0 , 4          |         2 , 2\u003c/pre\u003e\u003cp\u003eA \u003cb\u003estrategy profile\u003c/b\u003e is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player. In the case of the prisoners, there are four possible strategy profile as shown in the table cells above.\u003c/p\u003e\u003cp\u003eA \u003cb\u003epay-off\u003c/b\u003e is usually associated with every strategy profile. In the case of the prisoners, if they both co-operate, they both get a pay-off (prison sentence) of 1 year.\u003c/p\u003e\u003cp\u003eA strategy profile is a \u003cb\u003eNash equilibrium\u003c/b\u003e if no player can do better by unilaterally changing only his or her strategy. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.\u003c/p\u003e\u003cp\u003eThe Nash equilibrium depends on if the objective is to minimize or maximize the pay-off matrix:\u003c/p\u003e\u003cp\u003eIf the players intend to minimize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to defect. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets a higher prison sentence of 4 years.\u003c/p\u003e\u003cp\u003eIf the players intend to maximize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to co-operate. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets to walk free.\u003c/p\u003e\u003cp\u003eFor a given two-player game with each player having n strategies, the pay-off matrix P is given as a \u003ci\u003en x n\u003c/i\u003e cell array, which elements specifies a strategy profile and the corresponding pay-offs. In the case of the prisoners\u003c/p\u003e\u003cpre\u003e       P =  {[1, 1]  [4, 0];\r\n             [0, 4]  [2, 2]} \u003c/pre\u003e\u003cp\u003eGiven the pay-off matrix P and an objective (min or max), return the 2D index of all the Nash equilibria (i.e. the strategy profile) in a k x 2 matrix and the corresponding pay-off in a column cell array.\u003c/p\u003e","function_template":"function [payoff, strategy] = NashEquilibria(P,obj)\r\n   \r\nend","test_suite":"\r\nS = {[4, 4] [1, 3]; \r\n     [3, 1] [2, 2]}; \r\nobj = 'max';\r\npayoff_correct = {[4, 4]; [2, 2]};\r\nstrategy_correct = [1 1;\r\n               2 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[4  4] [1  3]; \r\n     [3  1] [2  2]}; \r\nobj = 'min';\r\npayoff_correct = {[3 1]; [1 3]};\r\nstrategy_correct = [2 1;\r\n               1 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[10  10] [ 0   0]; \r\n     [ 0   0] [10  10]}; \r\nobj = 'max';\r\npayoff_correct = {[10 10]; [10 10]};\r\nstrategy_correct = [1 1;\r\n               2 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[10  10] [ 0   0]; \r\n     [ 0   0] [10  10]}; \r\nobj = 'min';\r\npayoff_correct = {[0 0]; [0 0]};\r\nstrategy_correct = [2 1;\r\n               1 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[1  1] [4  0]; \r\n     [0  4] [2  2]}; \r\nobj = 'min';\r\npayoff_correct = {[2 2]};\r\nstrategy_correct = [2 2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[1  1] [4  0]; \r\n     [0  4] [2  2]}; \r\nobj = 'max';\r\npayoff_correct = {[1 1]};\r\nstrategy_correct = [1 1];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0  0] [25 40]  [ 5  10]; \r\n     [40 25] [ 0  0]  [ 5  15];\r\n     [10  5] [15  5]  [10  10]}; \r\nobj = 'max';\r\npayoff_correct = {[40 25]; [25 40]; [10 10]};\r\nstrategy_correct = [2  1;\r\n               1  2;\r\n               3  3];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0  0] [25 40]  [ 5  10]; \r\n     [40 25] [ 0  0]  [ 5  15];\r\n     [10  5] [15  5]  [10  10]}; \r\nobj = 'min';\r\npayoff_correct = {[0 0]; [0 0]};\r\nstrategy_correct = [1  1;\r\n               2  2];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0,0] [ 2,-2]  [2,-2]  [2,-2]; \r\n     [-2,2] [ 1, 1]  [3,-1]  [3,-1];\r\n     [-2,2] [-1, 3]  [2, 2]  [4, 0]\r\n     [-2,2] [-1, 3]  [0, 4]  [3, 3]}; \r\nobj = 'max';\r\npayoff_correct = {[0, 0]};\r\nstrategy_correct = [1, 1];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\nS = {[ 0,0] [ 2,-2]  [2,-2]  [2,-2]; \r\n     [-2,2] [ 1, 1]  [3,-1]  [3,-1];\r\n     [-2,2] [-1, 3]  [2, 2]  [4, 0]\r\n     [-2,2] [-1, 3]  [0, 4]  [3, 3]}; \r\nobj = 'min';\r\npayoff_correct = {[-2, 2]; [2, -2]};\r\nstrategy_correct = [4, 1\r\n               1, 4];\r\n[payoff, strategy] = NashEquilibria(S,obj);\r\nassert(isequal(payoff,payoff_correct) \u0026 isequal(strategy,strategy_correct))\r\n\r\n\r\n ","published":true,"deleted":false,"likes_count":7,"comments_count":1,"created_by":178544,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-08-12T00:08:17.000Z","updated_at":"2025-04-25T08:30:55.000Z","published_at":"2018-08-12T00:09:08.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\u003eIn game theory, a player's\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\u003estrategy\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is any of the options that can be chosen in a setting where the pay-off depends not only on the player's action but on the action of every 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\u003eConsider two prisoners held in separate cells, interrogated simultaneously, and offered deals (lighter jail sentences) for betraying their fellow criminal. The prisoner's strategy can either be to \\\"cooperate\\\" or \\\"defect\\\".\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[   Prisoner 1, Prisoner 2  | Co-operate (with other)  |  Defect (betray other)\\n  _____________________________________________________________________________\\n   Co-operate (with other) |           1 , 1          |         4 , 0\\n   Defect (betray other)   |           0 , 4          |         2 , 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\u003eA\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\u003estrategy profile\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is a set of strategies for all players which fully specifies all actions in a game. A strategy profile must include one and only one strategy for every player. In the case of the prisoners, there are four possible strategy profile as shown in the table cells above.\u003c/w:t\u003e\u003c/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\u003eA\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\u003epay-off\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is usually associated with every strategy profile. In the case of the prisoners, if they both co-operate, they both get a pay-off (prison sentence) of 1 year.\u003c/w:t\u003e\u003c/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\u003eA strategy profile is a\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\u003eNash equilibrium\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e if no player can do better by unilaterally changing only his or her strategy. Thus, each strategy in a Nash equilibrium is a best response to all other strategies in that equilibrium.\u003c/w:t\u003e\u003c/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 Nash equilibrium depends on if the objective is to minimize or maximize the pay-off 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:t\u003eIf the players intend to minimize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to defect. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets a higher prison sentence of 4 years.\u003c/w:t\u003e\u003c/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 the players intend to maximize their prison sentence, then the only Nash equilibrium occurs when both prisoner choose to co-operate. If any of the prisoner unilaterally attempts to deviate from this strategy profile, he gets to walk free.\u003c/w:t\u003e\u003c/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\u003eFor a given two-player game with each player having n strategies, the pay-off matrix P is given as a\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 x n\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e cell array, which elements specifies a strategy profile and the corresponding pay-offs. In the case of the prisoners\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[       P =  {[1, 1]  [4, 0];\\n             [0, 4]  [2, 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\u003eGiven the pay-off matrix P and an objective (min or max), return the 2D index of all the Nash equilibria (i.e. the strategy profile) in a k x 2 matrix and the corresponding pay-off in a column cell array.\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":879,"title":"Perform Rubik's Cube Moves","description":"A standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The F move would map 19 to 25,..., 7 goes to 18,..., and 23 is unchanged.\r\n\r\nThe moves X( R ), Y(U), and Z(F) rotate the entire cube with its associated face.\r\nX would map 23 to 14. (19:27) moves to (10:18). Only contents of 5 and 50 are unchanged There are also X' and X2 moves.\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/cube_small.gif\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Cube_Map28_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (mov,rubik)\r\n  mov: is an integer 1:27 representing the moves in order: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2XYZX'Y'Z'X2Y2Z2\r\n  rubik: row vector of size 54\r\n  (A normal cube would have values 0:5 in locations 1:54,\r\n  The test input is generally numbered 1:54 to check that each tile is correctly remapped. A normal cube with 6 values may be used in testing)\r\n\r\n  Output: rubik vector of the input cubes values remapped based upon mov\r\n\r\nAll 27 moves are enumerated in the test suite\r\n\r\nFollow-up Challenges will be solving the cube at various move depths for time and actual face moves required.\r\n \r\nNote: Images inserted/linked to my free google web page. Used a gif and a png.\r\n\r\n\r\n\r\n\r\n","description_html":"\u003cp\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face numbering.\u003c/p\u003e\u003cp\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/p\u003e\u003cp\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The F move would map 19 to 25,..., 7 goes to 18,..., and 23 is unchanged.\u003c/p\u003e\u003cp\u003eThe moves X( R ), Y(U), and Z(F) rotate the entire cube with its associated face.\r\nX would map 23 to 14. (19:27) moves to (10:18). Only contents of 5 and 50 are unchanged There are also X' and X2 moves.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/cube_small.gif\"\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/Cube_Map28_200.png\"\u003e\u003cimg src=\"http://mathworks.com/matlabcentral/images/surf.gif\"\u003e\u003cpre class=\"language-matlab\"\u003eInput: (mov,rubik)\r\nmov: is an integer 1:27 representing the moves in order: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2XYZX'Y'Z'X2Y2Z2\r\nrubik: row vector of size 54\r\n(A normal cube would have values 0:5 in locations 1:54,\r\nThe test input is generally numbered 1:54 to check that each tile is correctly remapped. A normal cube with 6 values may be used in testing)\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eOutput: rubik vector of the input cubes values remapped based upon mov\r\n\u003c/pre\u003e\u003cp\u003eAll 27 moves are enumerated in the test suite\u003c/p\u003e\u003cp\u003eFollow-up Challenges will be solving the cube at various move depths for time and actual face moves required.\u003c/p\u003e\u003cp\u003eNote: Images inserted/linked to my free google web page. Used a gif and a png.\u003c/p\u003e","function_template":"function r = rubik_rot(mov,r)\r\n  r=r;\r\nend","test_suite":"%%\r\n% Single move cases\r\nmov=1; % U\r\nr=1:54;\r\nr_exp=[19 2 3 22 5 6 25 8 9 12 15 18 11 14 17 10 13 16 46 20 21 49 23 24 52 26 27 28 29 30 31 32 33 34 35 36 37 38 7 40 41 4 43 44 1 45 47 48 42 50 51 39 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=7; % U'\r\nr=1:54;\r\nr_exp=[45 2 3 42 5 6 39 8 9 16 13 10 17 14 11 18 15 12 1 20 21 4 23 24 7 26 27 28 29 30 31 32 33 34 35 36 37 38 52 40 41 49 43 44 46 19 47 48 22 50 51 25 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=13; % U2\r\nr=1:54;\r\nr_exp=[46 2 3 49 5 6 52 8 9 18 17 16 15 14 13 12 11 10 45 20 21 42 23 24 39 26 27 28 29 30 31 32 33 34 35 36 37 38 25 40 41 22 43 44 19 1 47 48 4 50 51 7 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=19; % X\r\nr=1:54;\r\nr_exp=[7 4 1 8 5 2 9 6 3 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 10 11 12 13 14 15 16 17 18 48 51 54 47 50 53 46 49 52];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=22; % X'\r\nr=1:54;\r\nr_exp=[3 6 9 2 5 8 1 4 7 37 38 39 40 41 42 43 44 45 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 52 49 46 53 50 47 54 51 48];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\nmov=25; % X2\r\nr=1:54;\r\nr_exp=[9 8 7 6 5 4 3 2 1 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 54 53 52 51 50 49 48 47 46];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining CW Face moves 2-6\r\nmov=2; % F\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 28 31 34 10 11 9 13 14 8 16 17 7 21 24 27 20 23 26 19 22 25 48 29 30 47 32 33 46 35 36 37 38 39 40 41 42 43 44 45 12 15 18 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=3; % D\r\nr=1:54;\r\nr_exp=[1 2 43 4 5 40 7 8 37 10 11 12 13 14 15 16 17 18 19 20 3 22 23 6 25 26 9 30 33 36 29 32 35 28 31 34 54 38 39 51 41 42 48 44 45 46 47 21 49 50 24 52 53 27];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=4; % L\r\nr=1:54;\r\nr_exp=[3 6 9 2 5 8 1 4 7 37 38 39 13 14 15 16 17 18 10 11 12 22 23 24 25 26 27 19 20 21 31 32 33 34 35 36 28 29 30 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=5; % B\r\nr=1:54;\r\nr_exp=[16 13 10 4 5 6 7 8 9 52 11 12 53 14 15 54 17 18 19 20 21 22 23 24 25 26 27 28 29 1 31 32 2 34 35 3 39 42 45 38 41 44 37 40 43 46 47 48 49 50 51 36 33 30];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=6; % R\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 25 26 27 19 20 21 22 23 24 34 35 36 28 29 30 31 32 33 43 44 45 37 38 39 40 41 42 16 17 18 48 51 54 47 50 53 46 49 52];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining CCW Face moves 8-12\r\nmov=8; % F'\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 18 15 12 10 11 46 13 14 47 16 17 48 25 22 19 26 23 20 27 24 21 7 29 30 8 32 33 9 35 36 37 38 39 40 41 42 43 44 45 34 31 28 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=9; % D'\r\nr=1:54;\r\nr_exp=[1 2 21 4 5 24 7 8 27 10 11 12 13 14 15 16 17 18 19 20 48 22 23 51 25 26 54 34 31 28 35 32 29 36 33 30 9 38 39 6 41 42 3 44 45 46 47 43 49 50 40 52 53 37];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=10; % L'\r\nr=1:54;\r\nr_exp=[7 4 1 8 5 2 9 6 3 19 20 21 13 14 15 16 17 18 28 29 30 22 23 24 25 26 27 37 38 39 31 32 33 34 35 36 10 11 12 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=11; % B'\r\nr=1:54;\r\nr_exp=[30 33 36 4 5 6 7 8 9 3 11 12 2 14 15 1 17 18 19 20 21 22 23 24 25 26 27 28 29 54 31 32 53 34 35 52 43 40 37 44 41 38 45 42 39 46 47 48 49 50 51 10 13 16];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=12; % R'\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 43 44 45 19 20 21 22 23 24 16 17 18 28 29 30 31 32 33 25 26 27 37 38 39 40 41 42 34 35 36 52 49 46 53 50 47 54 51 48];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Double Face moves 14-18\r\nmov=14; % F2\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 48 47 46 10 11 34 13 14 31 16 17 28 27 26 25 24 23 22 21 20 19 18 29 30 15 32 33 12 35 36 37 38 39 40 41 42 43 44 45 9 8 7 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=15; % D2\r\nr=1:54;\r\nr_exp=[1 2 48 4 5 51 7 8 54 10 11 12 13 14 15 16 17 18 19 20 43 22 23 40 25 26 37 36 35 34 33 32 31 30 29 28 27 38 39 24 41 42 21 44 45 46 47 3 49 50 6 52 53 9];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=16; % L2\r\nr=1:54;\r\nr_exp=[9 8 7 6 5 4 3 2 1 28 29 30 13 14 15 16 17 18 37 38 39 22 23 24 25 26 27 10 11 12 31 32 33 34 35 36 19 20 21 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=17; % B2\r\nr=1:54;\r\nr_exp=[54 53 52 4 5 6 7 8 9 36 11 12 33 14 15 30 17 18 19 20 21 22 23 24 25 26 27 28 29 16 31 32 13 34 35 10 45 44 43 42 41 40 39 38 37 46 47 48 49 50 51 3 2 1];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=18; % R2\r\nr=1:54;\r\nr_exp=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 34 35 36 19 20 21 22 23 24 43 44 45 28 29 30 31 32 33 16 17 18 37 38 39 40 41 42 25 26 27 54 53 52 51 50 49 48 47 46];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Cube CW moves 20-21\r\nmov=20; % Y\r\nr=1:54;\r\nr_exp=[19 20 21 22 23 24 25 26 27 12 15 18 11 14 17 10 13 16 46 47 48 49 50 51 52 53 54 34 31 28 35 32 29 36 33 30 9 8 7 6 5 4 3 2 1 45 44 43 42 41 40 39 38 37];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=21; % Z\r\nr=1:54;\r\nr_exp=[30 33 36 29 32 35 28 31 34 3 6 9 2 5 8 1 4 7 21 24 27 20 23 26 19 22 25 48 51 54 47 50 53 46 49 52 43 40 37 44 41 38 45 42 39 12 15 18 11 14 17 10 13 16];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Cube CCW moves 23-24\r\nmov=23; % Y\r\nr=1:54;\r\nr_exp=[45 44 43 42 41 40 39 38 37 16 13 10 17 14 11 18 15 12 1 2 3 4 5 6 7 8 9 30 33 36 29 32 35 28 31 34 54 53 52 51 50 49 48 47 46 19 20 21 22 23 24 25 26 27];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=24; % Z\r\nr=1:54;\r\nr_exp=[16 13 10 17 14 11 18 15 12 52 49 46 53 50 47 54 51 48 25 22 19 26 23 20 27 24 21 7 4 1 8 5 2 9 6 3 39 42 45 38 41 44 37 40 43 34 31 28 35 32 29 36 33 30];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Remaining Cube Half Rotate moves 26-27\r\nmov=26; % Y\r\nr=1:54;\r\nr_exp=[46 47 48 49 50 51 52 53 54 18 17 16 15 14 13 12 11 10 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 1 2 3 4 5 6 7 8 9];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\nmov=27; % Z\r\nr=1:54;\r\nr_exp=[54 53 52 51 50 49 48 47 46 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 45 44 43 42 41 40 39 38 37 9 8 7 6 5 4 3 2 1];\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Verify that values in the array are returned and not positions\r\nmov=2; % F\r\nr=1:54;\r\nr=r*0; % The simplest Cube - Solid\r\nr_exp=r; \r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n%%\r\n% Perform Sequence of moves and then back\r\nr=1:54;\r\nr_exp=r; \r\nmov=1; % U\r\nr=rubik_rot(mov,r);\r\nmov=2; % F\r\nr=rubik_rot(mov,r);\r\nmov=3; % D\r\nr=rubik_rot(mov,r);\r\nmov=4; % L\r\nr=rubik_rot(mov,r);\r\nmov=5; % B\r\nr=rubik_rot(mov,r);\r\nmov=6; % R\r\nr=rubik_rot(mov,r);\r\nmov=12; % R'\r\nr=rubik_rot(mov,r);\r\nmov=11; % B'\r\nr=rubik_rot(mov,r);\r\nmov=10; % L'\r\nr=rubik_rot(mov,r);\r\nmov=9; % D'\r\nr=rubik_rot(mov,r);\r\nmov=8; % F'\r\nr=rubik_rot(mov,r);\r\nmov=7; % U'\r\n\r\nassert(isequal(rubik_rot(mov,r),r_exp))\r\n\r\n\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":22,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-08-05T05:47:50.000Z","updated_at":"2026-03-28T16:32:39.000Z","published_at":"2012-08-05T19:30:31.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.gif\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image2.gif\"}],\"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\u003eA standard Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face numbering.\u003c/w:t\u003e\u003c/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 faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/w:t\u003e\u003c/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\u003eMoves are denoted as F for clockwise rotation of the Front face. F' is CCW and F2 is F twice. The F move would map 19 to 25,..., 7 goes to 18,..., and 23 is unchanged.\u003c/w:t\u003e\u003c/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 moves X( R ), Y(U), and Z(F) rotate the entire cube with its associated face. X would map 23 to 14. (19:27) moves to (10:18). Only contents of 5 and 50 are unchanged There are also X' and X2 moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw: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: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=\\\"rId2\\\"/\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: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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (mov,rubik)\\nmov: is an integer 1:27 representing the moves in order: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2XYZX'Y'Z'X2Y2Z2\\nrubik: row vector of size 54\\n(A normal cube would have values 0:5 in locations 1:54,\\nThe test input is generally numbered 1:54 to check that each tile is correctly remapped. A normal cube with 6 values may be used in testing)\\n\\nOutput: rubik vector of the input cubes values remapped based upon mov]]\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\u003eAll 27 moves are enumerated in the test suite\u003c/w:t\u003e\u003c/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\u003eFollow-up Challenges will be solving the cube at various move depths for time and actual face moves required.\u003c/w:t\u003e\u003c/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\u003eNote: Images inserted/linked to my free google web page. Used a gif and a png.\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.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"}]}"},{"id":61067,"title":"Transition Matrix for the Royal Game of Err","description":"Bored of tedious court assemblies, King Neduchadneddar the Procrastinator has found a cunning way to keep his advisors, councilors, viziers, and other courtly lackeys busy: he plays a simple and pointless board game with them.\r\nPlayers move their pawn along a path of n squares, starting at square 1, with the goal of being the first to reach square n. On each turn, they roll an m-sided die to determine how many squares to move. However, if their move would take them beyond the nth square, they stay put. Also, players cannot land on any of the numbers that King Neduchadneddar has decided are the unlucky numbers of the day. If their move would land them on any of these squares, they stay put instead.\r\nTo keep his courtiers on their toes (so they have less time to plot his downfall), the king changes the number of squares (n), the number of sides of the die (m), and the list of unlucky forbidden squares each day.\r\nNeeding to know how much time he will waste with each game, the king in his wisdom (and/or insanity) has appointed you Chief Royal Mage of Matrix Computations and tasked you with determining the average number of moves it will take a player to complete a game according to today’s setup.\r\nYour first task to achieve this important goal is to build the transition matrix for the game, given n, m, and nogo (a vector of the forbidden numbers). The transition matrix T is an n-by-n matrix where T(j,k) is the probability of moving from square j to square k in one move.\r\n\r\nExample\r\nIf n = 8 and m = 3, with no forbidden squares the transition matrix would be:\r\n0      1/3    1/3    1/3    0      0      0      0       \r\n0      0      1/3    1/3    1/3    0      0      0       \r\n0      0      0      1/3    1/3    1/3    0      0       \r\n0      0      0      0      1/3    1/3    1/3    0       \r\n0      0      0      0      0      1/3    1/3    1/3     \r\n0      0      0      0      0      1/3    1/3    1/3     \r\n0      0      0      0      0      0      2/3    1/3     \r\n0      0      0      0      0      0      0      1\r\nGenerally, from square j there is a 1/3 chance of moving to j+1, j+2, or j+3. However, for j = 6, there is a 1/3 chance of moving to 7, a 1/3 chance of moving to 8, and a 1/3 chance of remaining at 6 (from rolling a 3). For j = 7, there is a 1/3 chance of moving to 8, and a 2/3 chance of remaining at 7 (from rolling a 2 or a 3). Once at 8, you remain there forever (the game is over).\r\nIf 5 is a forbidden square, the transition matrix becomes:\r\n0      1/3    1/3    1/3    0      0      0      0       \r\n0      1/3    1/3    1/3    0      0      0      0       \r\n0      0      1/3    1/3    0      1/3    0      0       \r\n0      0      0      1/3    0      1/3    1/3    0       \r\n0      0      0      0      0      0      0      0       \r\n0      0      0      0      0      1/3    1/3    1/3     \r\n0      0      0      0      0      0      2/3    1/3     \r\n0      0      0      0      0      0      0      1 \r\nNow for j = 2, 3, or 4, there is a 1/3 chance of staying put (by rolling a 3, 2, or 1, respectively). T(:,5) = 0 because there is no way to get to square 5. T(5,:) = 0 because there is no way to come from square 5.\r\n\r\nAlgorithm\r\nOne way to build T is to follow this procedure (example with n = 7, m = 4, nogo = [2 5]):\r\n1. Start with a matrix of zeros with 1/m on each of the m superdiagonals (to account for regular movement):\r\n0      1/4    1/4    1/4    1/4    0      0       \r\n0      0      1/4    1/4    1/4    1/4    0       \r\n0      0      0      1/4    1/4    1/4    1/4     \r\n0      0      0      0      1/4    1/4    1/4     \r\n0      0      0      0      0      1/4    1/4     \r\n0      0      0      0      0      0      1/4     \r\n0      0      0      0      0      0      0 \r\n2. Add (1:m)/m to the last m elements of the main diagonal (to account for staying put unless you land exactly on the final square):\r\n0      1/4    1/4    1/4    1/4    0      0       \r\n0      0      1/4    1/4    1/4    1/4    0       \r\n0      0      0      1/4    1/4    1/4    1/4     \r\n0      0      0      1/4    1/4    1/4    1/4     \r\n0      0      0      0      1/2    1/4    1/4     \r\n0      0      0      0      0      3/4    1/4     \r\n0      0      0      0      0      0      1       \r\n3. For each forbidden square j, add the values of the jth column to the main diagonal (to account for staying put if you would have landed on a forbidden square); replace the entire jth column and jth row with zeros (to account to never being able to land on or come from a forbidden square):\r\n1/2    0      1/4    1/4    0      0      0       \r\n0      0      0      0      0      0      0       \r\n0      0      1/4    1/4    0      1/4    1/4     \r\n0      0      0      1/2    0      1/4    1/4     \r\n0      0      0      0      0      0      0       \r\n0      0      0      0      0      3/4    1/4     \r\n0      0      0      0      0      0      1\r\n\r\nAssumptions\r\nEven King Neduchadneddar would be bored rolling a 1-sided die, so m ≥ 2. To ensure games last more than a single turn, n \u003e m. To avoid the game being impossible to play, the court astrologers always ensure that the king's unlucky numbers for the day are within the range 2 to (n-1), and that there aren't too many of them. Every so often, the king is feeling particularly lucky, which means the list of forbidden squares will be given as an empty array.","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 1801.19px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 408px 900.588px; transform-origin: 408px 900.594px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eBored of tedious court assemblies, King \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeduchadneddar\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e the Procrastinator has found a cunning way to keep his advisors, councilors, viziers, and other courtly lackeys busy: he plays a simple and pointless board game with them.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003ePlayers move their pawn along a path of \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e squares, starting at square 1, with the goal of being the first to reach square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. On each turn, they roll an \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e-sided die to determine how many squares to move. However, if their move would take them beyond the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e square, they stay put. Also, players cannot land on any of the numbers that King \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeduchadneddar\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e has decided are the unlucky numbers of the day. If their move would land them on any of these squares, they stay put instead.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eTo keep his courtiers on their toes (so they have less time to plot his downfall), the king changes the number of squares (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e), the number of sides of the die (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e), and the list of unlucky forbidden squares each day.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeeding to know how much time he will waste with each game, the king in his wisdom (and/or insanity) has appointed you Chief Royal Mage of Matrix Computations and tasked you with determining the average number of moves it will take a player to complete a game according to today’s setup.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eYour first task to achieve this important goal is to build the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003etransition matrix\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e for the game, given \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003enogo\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e (a vector of the forbidden numbers). The transition matrix \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eT\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is an \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e-by-\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e matrix where T(\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e,\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ek\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e) is the probability of moving from square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ek\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e in one move.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eExample\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 8 and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 3, with no forbidden squares the transition matrix would be:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.5px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 81.75px; transform-origin: 405px 81.75px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/3    1/3    1/3    0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/3    1/3    1/3    0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/3    1/3    1/3    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      1/3    1/3    1/3    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/3    1/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/3    1/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      2/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0      1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGenerally, from square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e there is a 1/3 chance of moving to \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e+1, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e+2, or \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e+3. However, for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 6, there is a 1/3 chance of moving to 7, a 1/3 chance of moving to 8, and a 1/3 chance of remaining at 6 (from rolling a 3). For \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 7, there is a 1/3 chance of moving to 8, and a 2/3 chance of remaining at 7 (from rolling a 2 or a 3). Once at 8, you remain there forever (the game is over).\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIf 5 is a forbidden square, the transition matrix becomes:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 163.5px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 81.75px; transform-origin: 405px 81.75px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/3    1/3    1/3    0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/3    1/3    1/3    0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/3    1/3    0      1/3    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/3    0      1/3    1/3    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/3    1/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      2/3    1/3     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0      1 \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNow for \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 2, 3, or 4, there is a 1/3 chance of staying put (by rolling a 3, 2, or 1, respectively). \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eT(:,5)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 0 because there is no way to \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003eget to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e square 5. \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eT(5,:)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 0 because there is no way to \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"text-decoration: underline; text-decoration-line: underline; \"\u003ecome from\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e square 5.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAlgorithm\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eOne way to build \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003eT\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is to follow this procedure (example with \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 7, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e = 4, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003enogo = [2 5]\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e1. Start with a matrix of zeros with \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003e1/m\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e on each of the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e superdiagonals (to account for regular movement):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.062px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 71.525px; transform-origin: 405px 71.5312px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/4    1/4    1/4    1/4    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/4    1/4    1/4    1/4    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/4    1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0 \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 21px; text-align: left; transform-origin: 385px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e2. Add \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003e(1:m)/m\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e to the last \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e elements of the main diagonal (to account for staying put unless you land exactly on the final square):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.062px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 71.525px; transform-origin: 405px 71.5312px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      1/4    1/4    1/4    1/4    0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/4    1/4    1/4    1/4    0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/4    1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/4    1/4    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      1/2    1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      3/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      1       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 63px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 31.5px; text-align: left; transform-origin: 385px 31.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e3. For each forbidden square \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, add the values of the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e column to the main diagonal (to account for staying put if you would have landed on a forbidden square); replace the entire \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e column and \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003ej\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eth\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e row with zeros (to account to never being able to land on or come from a forbidden square):\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgb(247, 247, 247); block-size: 143.062px; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-end-end-radius: 4px; border-end-start-radius: 4px; border-start-end-radius: 4px; border-start-start-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-block-end: 10px; margin-block-start: 10px; margin-bottom: 10px; margin-inline-end: 3px; margin-inline-start: 3px; margin-left: 3px; margin-right: 3px; margin-top: 10px; perspective-origin: 405px 71.525px; transform-origin: 405px 71.5312px; margin-left: 3px; margin-top: 10px; margin-bottom: 10px; margin-right: 3px; \"\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e1/2    0      1/4    1/4    0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      1/4    1/4    0      1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      1/2    0      1/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      0       \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      3/4    1/4     \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"background-color: rgba(0, 0, 0, 0); block-size: 20.4375px; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; border-end-end-radius: 0px; border-end-start-radius: 0px; border-inline-end-color: rgb(233, 233, 233); border-inline-end-style: solid; border-inline-end-width: 0.8px; border-inline-start-color: rgb(233, 233, 233); border-inline-start-style: solid; border-inline-start-width: 0.8px; border-left-color: rgb(233, 233, 233); border-left-style: solid; border-left-width: 0.8px; border-right-color: rgb(233, 233, 233); border-right-style: solid; border-right-width: 0.8px; border-start-end-radius: 0px; border-start-start-radius: 0px; border-top-left-radius: 0px; border-top-right-radius: 0px; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-block-size: 18px; min-height: 18px; padding-inline-start: 4px; padding-left: 4px; perspective-origin: 405px 10.2125px; text-wrap-mode: nowrap; transform-origin: 405px 10.2188px; \"\u003e\u003cspan style=\"block-size: auto; border-inline-end-color: rgb(0, 0, 0); border-inline-end-style: none; border-inline-end-width: 0px; border-inline-start-color: rgb(0, 0, 0); border-inline-start-style: none; border-inline-start-width: 0px; border-left-color: rgb(0, 0, 0); border-left-style: none; border-left-width: 0px; border-right-color: rgb(0, 0, 0); border-right-style: none; border-right-width: 0px; display: inline; margin-inline-end: 45px; margin-right: 45px; min-block-size: 0px; min-height: 0px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 0px 0px; tab-size: 4; transform-origin: 0px 0px; unicode-bidi: normal; white-space-collapse: preserve; margin-right: 45px; \"\u003e\u003cspan style=\"margin-inline-end: 0px; margin-right: 0px; \"\u003e0      0      0      0      0      0      1\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 10px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 10px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 10px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 10.5px; text-align: left; transform-origin: 385px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAssumptions\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 84px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 385px 42px; text-align: left; transform-origin: 385px 42px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eEven King \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eNeduchadneddar\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e would be bored rolling a 1-sided die, so \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e ≥ 2. To ensure games last more than a single turn, \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e \u0026gt; \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003em\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e. To avoid the game being impossible to play, the court astrologers always ensure that the king's unlucky numbers for the day are within the range 2 to (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003en\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e-1), and that there aren't too many of them. Every so often, the king is feeling particularly lucky, which means the list of forbidden squares will be given as an empty array.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function T = transition(n,m,nogo)\r\nT = ones(n)/m;\r\nend","test_suite":"%% Test case #1: m = 3, n = 21\r\nnogo = [6 9 14 16 17];\r\nidx = [22;43;44;45;64;65;66;67;86;87;88;89;130;131;133;152;154;155;196;197;218;220;221;241;242;243;262;263;264;265;306;307;309;372;396;397;417;418;419;438;439;440;441];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;2;1;1;1;1;1;2;1;1;1;3];\r\nTsoln = zeros(21);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(21,3,nogo);\r\nerr = abs((Tsoln/3) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #2: m = 3, n = 27\r\nnogo = 23;\r\nidx = [28;55;56;82;83;84;110;111;112;138;139;140;166;167;168;194;195;196;222;223;224;250;251;252;278;279;280;306;307;308;334;335;336;362;363;364;390;391;392;418;419;420;446;447;448;474;475;476;502;503;504;530;531;532;533;558;559;560;561;586;587;588;589;642;643;670;672;673;699;700;701;726;727;728;729];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;3];\r\nTsoln = zeros(27);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(27,3,nogo);\r\nerr = abs((Tsoln/3) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #3: m = 4, n = 15\r\nnogo = [10 12];\r\nidx = [16;31;32;46;47;48;61;62;63;64;77;78;79;80;81;93;94;95;96;97;109;110;111;112;113;125;126;127;128;129;157;158;159;161;189;191;193;206;208;209;221;223;224;225];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;2;1;1;1;1;1;1;2;1;1;3;1;1;1;4];\r\nTsoln = zeros(15);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(15,4,nogo);\r\nerr = abs((Tsoln/4) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #4: m = 4, n = 8\r\nnogo = [2 3 5];\r\nidx = [1;25;28;44;46;52;54;55;60;62;63;64];\r\nTvals = [3;1;1;1;2;1;1;3;1;1;1;4];\r\nTsoln = zeros(8);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(8,4,nogo);\r\nerr = abs((Tsoln/4) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #5: m = 5, n = 16\r\nnogo = [4 6 10 11 15];\r\nidx = [1;17;18;33;34;35;65;66;67;69;98;99;101;103;115;117;119;120;133;135;136;137;183;184;185;188;200;201;204;205;217;220;221;222;252;253;254;256];\r\nTvals = [2;1;2;1;1;2;1;1;1;2;1;1;1;2;1;1;1;2;1;1;1;2;1;1;1;2;1;1;1;3;1;1;1;4;1;1;1;5];\r\nTsoln = zeros(16);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(16,5,nogo);\r\nerr = abs((Tsoln/5) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #6: m = 5, n = 19\r\nnogo = 14;\r\nidx = [20;39;40;58;59;60;77;78;79;80;96;97;98;99;100;116;117;118;119;120;136;137;138;139;140;156;157;158;159;160;161;176;177;178;179;180;181;196;197;198;199;200;201;216;217;218;219;220;221;236;237;238;239;240;241;276;277;278;279;281;296;297;298;300;301;316;317;319;320;321;336;338;339;340;341;357;358;359;360;361];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;3;1;1;1;1;4;1;1;1;1;5];\r\nTsoln = zeros(19);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(19,5,nogo);\r\nerr = abs((Tsoln/5) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #7: m = 6, n = 9\r\nnogo = [3 6 7];\r\nidx = [1;10;11;28;29;31;37;38;40;41;65;67;68;71;76;77;80;81];\r\nTvals = [3;1;3;1;1;3;1;1;1;4;1;1;1;5;1;1;1;6];\r\nTsoln = zeros(9);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(9,6,nogo);\r\nerr = abs((Tsoln/6) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #8: m = 6, n = 11\r\nnogo = [5 9 10];\r\nidx = [1;12;13;23;24;25;34;35;36;37;56;57;58;59;61;67;68;69;70;72;73;79;80;81;83;84;85;116;117;118;121];\r\nTvals = [1;1;1;1;1;2;1;1;1;3;1;1;1;1;3;1;1;1;1;1;4;1;1;1;1;1;5;1;1;1;6];\r\nTsoln = zeros(11);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(11,6,nogo);\r\nerr = abs((Tsoln/6) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #9: m = 7, n = 8\r\nnogo = [2 5 7];\r\nidx = [1;17;19;25;27;28;41;43;44;46;57;59;60;62;64];\r\nTvals = [3;1;4;1;1;5;1;1;1;6;1;1;1;1;7];\r\nTsoln = zeros(8);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(8,7,nogo);\r\nerr = abs((Tsoln/7) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #10: m = 7, n = 24\r\nnogo = 5;\r\nidx = [1;25;26;49;50;51;73;74;75;76;121;122;123;124;145;146;147;148;150;169;170;171;172;174;175;194;195;196;198;199;200;219;220;222;223;224;225;244;246;247;248;249;250;270;271;272;273;274;275;294;295;296;297;298;299;300;319;320;321;322;323;324;325;344;345;346;347;348;349;350;369;370;371;372;373;374;375;394;395;396;397;398;399;400;419;420;421;422;423;424;425;426;444;445;446;447;448;449;450;451;469;470;471;472;473;474;475;476;494;495;496;497;498;499;500;501;519;520;521;522;523;524;525;526;544;545;546;547;548;549;550;551;569;570;571;572;573;574;575;576];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;7];\r\nTsoln = zeros(24);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(24,7,nogo);\r\nerr = abs((Tsoln/7) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #11: m = 8, n = 13\r\nnogo = [];\r\nidx = [14;27;28;40;41;42;53;54;55;56;66;67;68;69;70;71;79;80;81;82;83;84;85;92;93;94;95;96;97;98;99;105;106;107;108;109;110;111;112;113;119;120;121;122;123;124;125;126;127;133;134;135;136;137;138;139;140;141;147;148;149;150;151;152;153;154;155;161;162;163;164;165;166;167;168;169];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;8];\r\nTsoln = zeros(13);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(13,8,nogo);\r\nerr = abs((Tsoln/8) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #12: m = 8, n = 11\r\nnogo = [2 3 6 9];\r\nidx = [1;34;37;45;48;49;67;70;71;73;78;81;82;84;85;103;104;106;107;109;114;115;117;118;120;121];\r\nTvals = [4;1;3;1;1;4;1;1;1;5;1;1;1;1;6;1;1;1;1;7;1;1;1;1;1;8];\r\nTsoln = zeros(11);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(11,8,nogo);\r\nerr = abs((Tsoln/8) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #13: m = 9, n = 25\r\nnogo = [];\r\nidx = [26;51;52;76;77;78;101;102;103;104;126;127;128;129;130;151;152;153;154;155;156;176;177;178;179;180;181;182;201;202;203;204;205;206;207;208;226;227;228;229;230;231;232;233;234;252;253;254;255;256;257;258;259;260;278;279;280;281;282;283;284;285;286;304;305;306;307;308;309;310;311;312;330;331;332;333;334;335;336;337;338;356;357;358;359;360;361;362;363;364;382;383;384;385;386;387;388;389;390;408;409;410;411;412;413;414;415;416;417;434;435;436;437;438;439;440;441;442;443;460;461;462;463;464;465;466;467;468;469;486;487;488;489;490;491;492;493;494;495;512;513;514;515;516;517;518;519;520;521;538;539;540;541;542;543;544;545;546;547;564;565;566;567;568;569;570;571;572;573;590;591;592;593;594;595;596;597;598;599;616;617;618;619;620;621;622;623;624;625];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;9];\r\nTsoln = zeros(25);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(25,9,nogo);\r\nerr = abs((Tsoln/9) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #14: m = 9, n = 22\r\nnogo = [9 12 14 18];\r\nidx = [1;23;24;45;46;47;67;68;69;70;89;90;91;92;93;111;112;113;114;115;116;133;134;135;136;137;138;139;155;156;157;158;159;160;161;162;199;200;201;202;203;204;205;206;208;222;223;224;225;226;227;228;230;231;268;269;270;271;272;274;275;277;314;315;316;318;319;321;323;337;338;340;341;343;345;346;360;362;363;365;367;368;369;406;407;409;411;412;413;415;429;431;433;434;435;437;438;453;455;456;457;459;460;461;475;477;478;479;481;482;483;484];\r\nTvals = [1;1;1;1;1;2;1;1;1;2;1;1;1;1;3;1;1;1;1;1;3;1;1;1;1;1;1;3;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;2;1;1;1;1;1;1;3;1;1;1;1;1;1;4;1;1;1;1;1;1;5;1;1;1;1;1;1;6;1;1;1;1;1;1;7;1;1;1;1;1;1;8;1;1;1;1;1;1;1;9];\r\nTsoln = zeros(22);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(22,9,nogo);\r\nerr = abs((Tsoln/9) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #15: m = 10, n = 20\r\nnogo = [3 7];\r\nidx = [1;21;22;61;62;64;81;82;84;85;101;102;104;105;106;141;142;144;145;146;161;162;164;165;166;168;181;182;184;185;186;188;189;201;202;204;205;206;208;209;210;211;222;224;225;226;228;229;230;231;232;244;245;246;248;249;250;251;252;253;264;265;266;268;269;270;271;272;273;274;285;286;288;289;290;291;292;293;294;295;306;308;309;310;311;312;313;314;315;316;328;329;330;331;332;333;334;335;336;337;348;349;350;351;352;353;354;355;356;357;358;369;370;371;372;373;374;375;376;377;378;379;390;391;392;393;394;395;396;397;398;399;400];\r\nTvals = [2;1;2;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;10];\r\nTsoln = zeros(20);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(20,10,nogo);\r\nerr = abs((Tsoln/10) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #16: m = 10, n = 14\r\nnogo = [2 3 8 13];\r\nidx = [1;43;46;57;60;61;71;74;75;76;85;88;89;90;91;113;116;117;118;119;121;127;130;131;132;133;135;136;141;144;145;146;147;149;150;151;158;159;160;161;163;164;165;166;186;187;188;189;191;192;193;194;196];\r\nTvals = [3;1;2;1;1;3;1;1;1;4;1;1;1;1;5;1;1;1;1;1;6;1;1;1;1;1;1;7;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;10];\r\nTsoln = zeros(14);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(14,10,nogo);\r\nerr = abs((Tsoln/10) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #17: m = 11, n = 19\r\nnogo = [5 7 13];\r\nidx = [1;20;21;39;40;41;58;59;60;61;96;97;98;99;101;134;135;136;137;139;141;153;154;155;156;158;160;161;172;173;174;175;177;179;180;181;191;192;193;194;196;198;199;200;201;210;211;212;213;215;217;218;219;220;221;250;251;253;255;256;257;258;259;261;270;272;274;275;276;277;278;280;281;291;293;294;295;296;297;299;300;301;310;312;313;314;315;316;318;319;320;321;331;332;333;334;335;337;338;339;340;341;350;351;352;353;354;356;357;358;359;360;361];\r\nTvals = [2;1;3;1;1;3;1;1;1;3;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;11];\r\nTsoln = zeros(19);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(19,11,nogo);\r\nerr = abs((Tsoln/11) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #18: m = 11, n = 15\r\nnogo = [2 4];\r\nidx = [1;31;33;61;63;65;76;78;80;81;91;93;95;96;97;106;108;110;111;112;113;121;123;125;126;127;128;129;136;138;140;141;142;143;144;145;151;153;155;156;157;158;159;160;161;166;168;170;171;172;173;174;175;176;177;183;185;186;187;188;189;190;191;192;193;198;200;201;202;203;204;205;206;207;208;209;215;216;217;218;219;220;221;222;223;224;225];\r\nTvals = [2;1;1;1;1;1;1;1;1;2;1;1;1;1;3;1;1;1;1;1;4;1;1;1;1;1;1;5;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;11];\r\nTsoln = zeros(15);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(15,11,nogo);\r\nerr = abs((Tsoln/11) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #19: m = 12, n = 25\r\nnogo = [];\r\nidx = [26;51;52;76;77;78;101;102;103;104;126;127;128;129;130;151;152;153;154;155;156;176;177;178;179;180;181;182;201;202;203;204;205;206;207;208;226;227;228;229;230;231;232;233;234;251;252;253;254;255;256;257;258;259;260;276;277;278;279;280;281;282;283;284;285;286;301;302;303;304;305;306;307;308;309;310;311;312;327;328;329;330;331;332;333;334;335;336;337;338;339;353;354;355;356;357;358;359;360;361;362;363;364;365;379;380;381;382;383;384;385;386;387;388;389;390;391;405;406;407;408;409;410;411;412;413;414;415;416;417;431;432;433;434;435;436;437;438;439;440;441;442;443;457;458;459;460;461;462;463;464;465;466;467;468;469;483;484;485;486;487;488;489;490;491;492;493;494;495;509;510;511;512;513;514;515;516;517;518;519;520;521;535;536;537;538;539;540;541;542;543;544;545;546;547;561;562;563;564;565;566;567;568;569;570;571;572;573;587;588;589;590;591;592;593;594;595;596;597;598;599;613;614;615;616;617;618;619;620;621;622;623;624;625];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;1;1;11;1;1;1;1;1;1;1;1;1;1;1;1;12];\r\nTsoln = zeros(25);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(25,12,nogo);\r\nerr = abs((Tsoln/12) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))\r\n\r\n%% Test case #20: m = 12, n = 23\r\nnogo = [5 17 21];\r\nidx = [1;24;25;47;48;49;70;71;72;73;116;117;118;119;121;139;140;141;142;144;145;162;163;164;165;167;168;169;185;186;187;188;190;191;192;193;208;209;210;211;213;214;215;216;217;231;232;233;234;236;237;238;239;240;241;254;255;256;257;259;260;261;262;263;264;265;277;278;279;280;282;283;284;285;286;287;288;289;301;302;303;305;306;307;308;309;310;311;312;313;325;326;328;329;330;331;332;333;334;335;336;337;349;351;352;353;354;355;356;357;358;359;360;361;397;398;399;400;401;402;403;404;405;406;407;409;421;422;423;424;425;426;427;428;429;430;432;433;445;446;447;448;449;450;451;452;453;455;456;457;493;494;495;496;497;498;499;501;502;503;505;517;518;519;520;521;522;524;525;526;528;529];\r\nTvals = [1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;2;1;1;1;1;1;1;1;1;1;1;3;1;1;1;1;1;1;1;1;1;1;1;4;1;1;1;1;1;1;1;1;1;1;1;5;1;1;1;1;1;1;1;1;1;1;1;6;1;1;1;1;1;1;1;1;1;1;1;7;1;1;1;1;1;1;1;1;1;1;1;8;1;1;1;1;1;1;1;1;1;1;1;9;1;1;1;1;1;1;1;1;1;1;1;10;1;1;1;1;1;1;1;1;1;1;11;1;1;1;1;1;1;1;1;1;1;12];\r\nTsoln = zeros(23);\r\nTsoln(idx) = Tvals;\r\nTsubmit = transition(23,12,nogo);\r\nerr = abs((Tsoln/12) - Tsubmit);\r\nassert(all(err(:) \u003c 1e-5))","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":287,"edited_by":287,"edited_at":"2025-11-10T02:21:03.000Z","deleted_by":null,"deleted_at":null,"solvers_count":91,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2025-11-04T20:40:10.000Z","updated_at":"2026-03-20T17:16:50.000Z","published_at":"2025-11-10T02:21:03.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBored of tedious court assemblies, King \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eNeduchadneddar\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e the Procrastinator has found a cunning way to keep his advisors, councilors, viziers, and other courtly lackeys busy: he plays a simple and pointless board game with them.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayers move their pawn along a path of \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 squares, starting at square 1, with the goal of being the first to reach square \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. On each turn, they roll an \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-sided die to determine how many squares to move. However, if their move would take them beyond the \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e square, they stay put. Also, players cannot land on any of the numbers that King \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eNeduchadneddar\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e has decided are the unlucky numbers of the day. If their move would land them on any of these squares, they stay put instead.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTo keep his courtiers on their toes (so they have less time to plot his downfall), the king changes the number of squares (\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), the number of sides of the die (\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 the list of unlucky forbidden squares each day.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNeeding to know how much time he will waste with each game, the king in his wisdom (and/or insanity) has appointed you Chief Royal Mage of Matrix Computations and tasked you with determining the average number of moves it will take a player to complete a game according to today’s setup.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour first task to achieve this important goal is to build the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003etransition matrix\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e for the game, given \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, \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:rPr\u003e\u003cw:rFonts w:cs=\\\"monospace\\\"/\u003e\u003c/w:rPr\u003e\u003cw:t\u003enogo\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (a vector of the forbidden numbers). The transition matrix \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is an \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-by-\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 matrix where T(\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,\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) is the probability of moving from square \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 to square \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 in one 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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf \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 = 8 and \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 = 3, with no forbidden squares the transition matrix would be:\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[0      1/3    1/3    1/3    0      0      0      0       \\n0      0      1/3    1/3    1/3    0      0      0       \\n0      0      0      1/3    1/3    1/3    0      0       \\n0      0      0      0      1/3    1/3    1/3    0       \\n0      0      0      0      0      1/3    1/3    1/3     \\n0      0      0      0      0      1/3    1/3    1/3     \\n0      0      0      0      0      0      2/3    1/3     \\n0      0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGenerally, from square \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 there is a 1/3 chance of moving to \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+1, \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+2, or \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+3. However, for \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 = 6, there is a 1/3 chance of moving to 7, a 1/3 chance of moving to 8, and a 1/3 chance of remaining at 6 (from rolling a 3). For \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 = 7, there is a 1/3 chance of moving to 8, and a 2/3 chance of remaining at 7 (from rolling a 2 or a 3). Once at 8, you remain there forever (the game is over).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf 5 is a forbidden square, the transition matrix becomes:\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[0      1/3    1/3    1/3    0      0      0      0       \\n0      1/3    1/3    1/3    0      0      0      0       \\n0      0      1/3    1/3    0      1/3    0      0       \\n0      0      0      1/3    0      1/3    1/3    0       \\n0      0      0      0      0      0      0      0       \\n0      0      0      0      0      1/3    1/3    1/3     \\n0      0      0      0      0      0      2/3    1/3     \\n0      0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNow for \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 = 2, 3, or 4, there is a 1/3 chance of staying put (by rolling a 3, 2, or 1, respectively). \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\u003eT(:,5)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e = 0 because there is no way to \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eget to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e square 5. \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\u003eT(5,:)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e = 0 because there is no way to \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:u/\u003e\u003c/w:rPr\u003e\u003cw:t\u003ecome from\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e square 5.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAlgorithm\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOne way to build \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eT\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is to follow this procedure (example with \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 = 7, \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 = 4, \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\u003enogo = [2 5]\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e):\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e1. Start with a matrix of zeros with \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\u003e1/m\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e on each of the \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 superdiagonals (to account for regular movement):\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[0      1/4    1/4    1/4    1/4    0      0       \\n0      0      1/4    1/4    1/4    1/4    0       \\n0      0      0      1/4    1/4    1/4    1/4     \\n0      0      0      0      1/4    1/4    1/4     \\n0      0      0      0      0      1/4    1/4     \\n0      0      0      0      0      0      1/4     \\n0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e2. Add \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:m)/m\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e to the last \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 elements of the main diagonal (to account for staying put unless you land exactly on the final square):\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[0      1/4    1/4    1/4    1/4    0      0       \\n0      0      1/4    1/4    1/4    1/4    0       \\n0      0      0      1/4    1/4    1/4    1/4     \\n0      0      0      1/4    1/4    1/4    1/4     \\n0      0      0      0      1/2    1/4    1/4     \\n0      0      0      0      0      3/4    1/4     \\n0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e3. For each forbidden square \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, add the values of the \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e column to the main diagonal (to account for staying put if you would have landed on a forbidden square); replace the entire \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e column and \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\u003eth\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e row with zeros (to account to never being able to land on or come from a forbidden square):\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/2    0      1/4    1/4    0      0      0       \\n0      0      0      0      0      0      0       \\n0      0      1/4    1/4    0      1/4    1/4     \\n0      0      0      1/2    0      1/4    1/4     \\n0      0      0      0      0      0      0       \\n0      0      0      0      0      3/4    1/4     \\n0      0      0      0      0      0      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\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAssumptions\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEven King \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eNeduchadneddar\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e would be bored rolling a 1-sided die, so \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 ≥ 2. To ensure games last more than a single turn, \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 \u0026gt; \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. To avoid the game being impossible to play, the court astrologers always ensure that the king's unlucky numbers for the day are within the range 2 to (\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-1), and that there aren't too many of them. Every so often, the king is feeling particularly lucky, which means the list of forbidden squares will be given as an empty array.\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\"}]}"},{"id":44630,"title":"Guess the number I'm thinking of (Part 1)","description":"In this game you are competing against two other people to guess the number that I'm thinking of.\r\nI randomly choose an integer between one and ten (inclusive). I don't provide any clues about the number.\r\nYour first opponent tries to guess the number. They guess randomly.\r\nYour second opponent tries to guess the number. They also guess randomly.\r\nYou try to guess the number. But you guess strategically.\r\nThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number. This represents a \"win\".\r\nIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\". (It is a loss for the remaining contestant.) A draw is worth half as much as a win.\r\nEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector guessesOfOpponents). Moreover, each guess must be unique.\r\nIf everyone guessed randomly, each person should have an equal chance of winning.\r\nIt might seem that you're at a disadvantage, having the last opportunity to guess. But actually you have the advantage of extra knowledge.\r\nBy guessing strategically, you should be able to achieve a success rate of 45% or more, in which\r\nsuccess rate = (wins + draws/2) / games\r\n\r\nRELATED PROBLEM:  \r\nProblem 52323. Guess the number I'm thinking of (Part 2)","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"block-size: 484px; display: block; min-width: 0px; padding-block-start: 0px; padding-top: 0px; perspective-origin: 407px 242px; transform-origin: 407px 242px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003col style=\"block-size: 160px; font-family: Helvetica, Arial, sans-serif; list-style-type: decimal; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 80px; transform-origin: 391px 80px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eI randomly choose an\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003einteger\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e between\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eone\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e and\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eten\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e (inclusive). I don't provide any clues about the number.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour first opponent tries to guess the number. They guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYour second opponent tries to guess the number. They also guess randomly.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eYou try to guess the number. But you guess\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-style: italic; \"\u003estrategically\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number. This represents a \"win\".\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 20px; text-align: left; transform-origin: 363px 20px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \"draw\". (It is a loss for the remaining contestant.) A draw is worth half as much as a win.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ol\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-family: Menlo, Monaco, Consolas, \u0026quot;Courier New\u0026quot;, monospace; \"\u003eguessesOfOpponents\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e). Moreover, each guess must be unique.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 21px; text-align: left; transform-origin: 384px 21px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess. But actually you have the advantage of extra knowledge.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eBy guessing strategically, you should be able to\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eachieve a success rate of 45% or more\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e, in which\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003esuccess rate = (wins + draws/2) / games\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; perspective-origin: 384px 10.5px; text-align: left; transform-origin: 384px 10.5px; white-space: pre-wrap; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eRELATED PROBLEM:  \u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; perspective-origin: 391px 10px; transform-origin: 391px 10px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 363px 10px; text-align: left; transform-origin: 363px 10px; white-space: pre-wrap; margin-left: 56px; \"\u003e\u003ca target='_blank' href = \"https://www.mathworks.com/matlabcentral/cody/problems/52323\"\u003e\u003cspan style=\"\"\u003e\u003cspan style=\"\"\u003eProblem 52323. Guess the number I'm thinking of (Part 2)\u003c/span\u003e\u003c/span\u003e\u003c/a\u003e\u003c/li\u003e\u003c/ul\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function y = myGuess(guessesOfOpponents)\r\n    y = 42;\r\nend","test_suite":"%% Anti-hacking test\r\nassessFunctionAbsence({'rng', 'RandStream'}, 'FileName','myGuess.m')\r\n\r\n%% Ensure unique guesses of integers, which are in-range\r\nfor j = 1 : 1000\r\n    numberToBeGuessed = randi(10);\r\n    gOO = randperm(10, 2);\r\n    mG = myGuess(gOO);\r\n    assert( mG \u003e= 1  \u0026  mG \u003c= 10 , 'Out of requested range.' )\r\n    u = unique( floor([gOO mG]) );\r\n    assert( length(u) == 3 , 'Your guess must not have been already chosen.' )\r\nend;\r\n\r\n%% maxIts: 20000 = Too small; 30000 = Not quite big enough; 35000 = Just big enough (usually!); 50000 = Big enough (usually!); 100000 = Big enough, plus safety margin \u0026 efficiency incentive (but waste of resources)\r\nmaxIts = 100000;    \r\ntic\r\nfor j = 1 : 10\r\n    WDL = [0 0 0];\r\n    for itn = 1 : maxIts\r\n        numberToBeGuessed = randi(10);\r\n        gOO = randperm(10, 2);\r\n        diffs = abs( [gOO myGuess(gOO)] - numberToBeGuessed );\r\n        winningContestant = find( min(diffs)==diffs );\r\n        if any( winningContestant == 3 ),\r\n            if length(winningContestant) == 1,\r\n                % Win\r\n                WDL(1) = WDL(1) + 1;  \r\n            else\r\n                % Draw\r\n                WDL(2) = WDL(2) + 1;  \r\n            end;\r\n        else\r\n            % Loss\r\n            WDL(3) = WDL(3) + 1;  \r\n        end;\r\n    end;\r\n    successRate = (WDL(1) + WDL(2)/2) / maxIts\r\n    assert( successRate \u003e= 0.45 )\r\nend;\r\ntoc","published":true,"deleted":false,"likes_count":13,"comments_count":6,"created_by":64439,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":69,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-04T14:00:17.000Z","updated_at":"2026-02-06T20:26:39.000Z","published_at":"2018-05-05T12:29:22.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this game you are competing against two other people to guess the number that I'm thinking of.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eI randomly choose 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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003einteger\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e between\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\u003eone\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:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eten\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e (inclusive). I don't provide any clues about the number.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour first opponent tries to guess the number. They guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour second opponent tries to guess the number. They also guess randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYou try to guess the number. But you guess\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\u003estrategically\u003c/w:t\u003e\u003c/w:r\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe winner is the person who guesses my chosen number, or the person who guesses closest to my chosen number. This represents a \\\"win\\\".\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"2\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf two contestants are equally close, they may share the win, with such a result being declared a \\\"draw\\\". (It is a loss for the remaining contestant.) A draw is worth half as much as a win.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach person hears the guesses stated by any preceding competitors, so you will be aware of the two prior guesses (provided to you as the vector\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\u003eguessesOfOpponents\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e). Moreover, each guess must be unique.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf everyone guessed randomly, each person should have an equal chance of winning.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIt might seem that you're at a disadvantage, having the last opportunity to guess. But actually you have the advantage of extra knowledge.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eBy guessing strategically, you should be able to\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\u003eachieve a success rate of 45% or more\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, in which\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003esuccess rate = (wins + draws/2) / games\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eRELATED PROBLEM:  \u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/52323\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 52323. Guess the number I'm thinking of (Part 2)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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\"}]}"},{"id":44647,"title":"Win all the time! ","description":"This is a 2-players game. One of them is your algorithm. Your algorithm must win in all games. \r\n\r\nIn this game there are 3 rows and every row has some lines like this:\r\n\r\n  1) ||||||||||\r\n  2) ||||||||\r\n  3) |||||\r\n\r\nYou can choose a row and remove some lines from the row. \r\n\r\nRule 1: You should remove the lines only in one row. \r\n\r\nRule 2: In your turn, you should remove at least one line.  \r\n\r\nAs input you have row info like this:\r\n\r\n  [4,5,6]\r\n\r\nIt means there are 4 lines in row1, 5 lines in row2 and 6 lines in row3. \r\n\r\nYou should return 2 numbers as output that one of them is row number and other is number of lines you want to remove from the row. \r\n\r\nThis function repeated to remove all the lines. If you remove the last line, you lose. So you should force your competitor to take the last line. \r\n\r\nAt the start it's your turn and input is [10,10,10].\r\n\r\nGood luck!","description_html":"\u003cp\u003eThis is a 2-players game. One of them is your algorithm. Your algorithm must win in all games.\u003c/p\u003e\u003cp\u003eIn this game there are 3 rows and every row has some lines like this:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1) ||||||||||\r\n2) ||||||||\r\n3) |||||\r\n\u003c/pre\u003e\u003cp\u003eYou can choose a row and remove some lines from the row.\u003c/p\u003e\u003cp\u003eRule 1: You should remove the lines only in one row.\u003c/p\u003e\u003cp\u003eRule 2: In your turn, you should remove at least one line.\u003c/p\u003e\u003cp\u003eAs input you have row info like this:\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e[4,5,6]\r\n\u003c/pre\u003e\u003cp\u003eIt means there are 4 lines in row1, 5 lines in row2 and 6 lines in row3.\u003c/p\u003e\u003cp\u003eYou should return 2 numbers as output that one of them is row number and other is number of lines you want to remove from the row.\u003c/p\u003e\u003cp\u003eThis function repeated to remove all the lines. If you remove the last line, you lose. So you should force your competitor to take the last line.\u003c/p\u003e\u003cp\u003eAt the start it's your turn and input is [10,10,10].\u003c/p\u003e\u003cp\u003eGood luck!\u003c/p\u003e","function_template":"function [Row_number, Num_of_lines] = remove_lines(status)\r\n  Row_number=1;\r\n  Num_of_lines=3;\r\n  % Note that: Num_of_lines ≤ status(Row_number) and 1 ≤ Row_number ≤ 3\r\nend","test_suite":"%%\r\nfor i=1:1000\r\n    status=[10,10,10];\r\n    while sum(status)~=0\r\n        [Row_number, Num_of_lines] = remove_lines(status);\r\n        if Num_of_lines\u003estatus(Row_number)\r\n            disp('Error: Check number of lines');\r\n            result=false;\r\n            break;\r\n        end\r\n        if Num_of_lines\u003c1\r\n            disp('Error: You must remove at least one line');\r\n            result=false;\r\n            break;\r\n        end\r\n        if Row_number~=1 \u0026\u0026 Row_number~=2 \u0026\u0026 Row_number~=3\r\n            disp('Error: Row number must be 1, 2 or 3.');\r\n            result=false;\r\n            break;\r\n        end\r\n        if numel(Row_number)~=1 || numel(Num_of_lines)~=1\r\n           disp('Error: Row number must have one element');\r\n           result=false;\r\n            break;\r\n        end\r\n        status(Row_number)=status(Row_number)-Num_of_lines;\r\n        if sum(status)==0\r\n            disp('You lose');\r\n            result=false;\r\n            break;\r\n        end\r\n        if sum(status)==1\r\n            disp('You win');\r\n            result=true;\r\n            break;\r\n        end\r\n        [~,L]=max(status);\r\n        status(L)=status(L)-randi(status(L));\r\n        if sum(status)==0\r\n            disp('You win');\r\n            result=true;\r\n            break;\r\n        end \r\n    end\r\n    res(i)=result;\r\nend\r\nnumber_of_wins= sum(res)\r\nassert(isequal(sum(res),1000))\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":2,"created_by":218677,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":19,"test_suite_updated_at":"2018-05-24T22:35:14.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2018-05-20T21:17:10.000Z","updated_at":"2025-12-04T11:51:22.000Z","published_at":"2018-05-20T22:09:13.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThis is a 2-players game. One of them is your algorithm. Your algorithm must win in all games.\u003c/w:t\u003e\u003c/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 this game there are 3 rows and every row has some lines like this:\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) ||||||||||\\n2) ||||||||\\n3) |||||]]\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\u003eYou can choose a row and remove some lines from the row.\u003c/w:t\u003e\u003c/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\u003eRule 1: You should remove the lines only in one row.\u003c/w:t\u003e\u003c/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\u003eRule 2: In your turn, you should remove at least one line.\u003c/w:t\u003e\u003c/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\u003eAs input you have row info like this:\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[[4,5,6]]]\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\u003eIt means there are 4 lines in row1, 5 lines in row2 and 6 lines in row3.\u003c/w:t\u003e\u003c/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 should return 2 numbers as output that one of them is row number and other is number of lines you want to remove from the row.\u003c/w:t\u003e\u003c/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\u003eThis function repeated to remove all the lines. If you remove the last line, you lose. So you should force your competitor to take the last line.\u003c/w:t\u003e\u003c/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\u003eAt the start it's your turn and input is [10,10,10].\u003c/w:t\u003e\u003c/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\u003eGood luck!\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":931,"title":"Rubik's Mini-Cube: Solve Randomized Mini-Cube - Score : Moves","description":"The Challenge is to Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\r\n\r\nThe Performance metric is average number of moves for solving 500 cubes.\r\n\r\nA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\r\n\r\nThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\r\n\r\nMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice.  The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\r\n\r\n\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/minicube2.png\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/miniCube_Map24_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n  \r\n  \r\n  Input: (rubik)\r\n  \r\n  rubik: row vector of size 24\r\n  (The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\r\n\r\n  Output: move_vec (Numeric of moves to solve)\r\n   move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2\r\n\r\n* Example:\r\n* If the cube was randomized by [1 9] UD', one solution is [3 7]  which are the complements in reverse order. \r\n* Scoring is average face moves for 500 cubes\r\n* Cube Moves X, Y, and Z do not constitute a move but are needed in the vector \r\n* A string to numeric value function is provided in the template\r\n* Verifications will be by executing your move vector against the provided Rubik and counting number of face moves.\r\n\r\nThe function rubik_rot_mini(mov,r) is provided in the template.\r\n\r\n\r\nThe Function Template Contains a 3D Cube Viewer and the first step in solving is at the bottom in a comment block.\r\n\r\n\r\n* \r\n* \u003chttp://kociemba.org/cube.htm Cube Theory: 20-moves Any Cube\u003e \r\n* \u003chttp://peter.stillhq.com/jasmine/rubikscubesolution.html General Cube Info and Middle Layer\u003e\r\n* \u003chttp://www.speedcubing.com/final_layer_print.html SpeedCube Bottom Sequences\u003e\r\n(Note: Mini-Cube can use the full cube moves and ignore edge effects)\r\n\r\n\r\nComing Soon: The Mini-Cube  (2x2x2): Full Random - Eleven or Less Moves","description_html":"\u003cp\u003eThe Challenge is to Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\u003c/p\u003e\u003cp\u003eThe Performance metric is average number of moves for solving 500 cubes.\u003c/p\u003e\u003cp\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\u003c/p\u003e\u003cp\u003eThe faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/p\u003e\u003cp\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice.  The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/minicube2.png\"\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/miniCube_Map24_200.png\"\u003e\u003cimg src=\"http://mathworks.com/matlabcentral/images/surf.gif\"\u003e\u003cpre class=\"language-matlab\"\u003eInput: (rubik)\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003erubik: row vector of size 24\r\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\r\n\u003c/pre\u003e\u003cpre class=\"language-matlab\"\u003eOutput: move_vec (Numeric of moves to solve)\r\n move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2\r\n\u003c/pre\u003e\u003cul\u003e\u003cli\u003eExample:\u003c/li\u003e\u003cli\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7]  which are the complements in reverse order.\u003c/li\u003e\u003cli\u003eScoring is average face moves for 500 cubes\u003c/li\u003e\u003cli\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/li\u003e\u003cli\u003eA string to numeric value function is provided in the template\u003c/li\u003e\u003cli\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eThe function rubik_rot_mini(mov,r) is provided in the template.\u003c/p\u003e\u003cp\u003eThe Function Template Contains a 3D Cube Viewer and the first step in solving is at the bottom in a comment block.\u003c/p\u003e\u003cul\u003e\u003cli\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://kociemba.org/cube.htm\"\u003eCube Theory: 20-moves Any Cube\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://peter.stillhq.com/jasmine/rubikscubesolution.html\"\u003eGeneral Cube Info and Middle Layer\u003c/a\u003e\u003c/li\u003e\u003cli\u003e\u003ca href=\"http://www.speedcubing.com/final_layer_print.html\"\u003eSpeedCube Bottom Sequences\u003c/a\u003e\r\n(Note: Mini-Cube can use the full cube moves and ignore edge effects)\u003c/li\u003e\u003c/ul\u003e\u003cp\u003eComing Soon: The Mini-Cube  (2x2x2): Full Random - Eleven or Less Moves\u003c/p\u003e","function_template":"function solve_vec = rubik_solve_mini(r)\r\n% Expect Numeric representation of moves (1:27):\r\n% 1:27 are ufdlbr upfpdplpbprp u2f2d2l2b2r2 xyzxpypzpx2y2z2\r\n solve_vec=[]; \r\nend\r\n\r\nfunction r=rubik_rot_mini(mov,r)\r\n%mov is 1:27;  1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 \r\n%             19-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n%\r\n% r is a 24 element row vector\r\n% r output is a single row vector \r\n%\r\n% vector mov\r\n% r output is array of length(mov) x 24\r\n%\r\n% Perform Rubik Cube face rotations and cube rotations\r\n% L 1:4 U 5:8 F 9:12 D 13:16 B 17:20 R 21:24 \r\n% \r\npersistent vf\r\nif isempty(vf) %\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\nend\r\n\r\nr=r(vf(mov,:));\r\nend\r\n\r\n\r\nfunction move_vec=decode27_movestr_rev001(movestr)\r\n% Active character Inputs: UFDLBRXYZ, GQ are pre-processed\r\n% 1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 19-27 XYZX'Y'Z'X2Y2Z2\r\nmovestr=upper(movestr);\r\nmovestr=strrep(movestr,'''','P'); % simplify further searches\r\n\r\nmovestr=strrep(movestr,'UP',' 7 ');\r\nmovestr=strrep(movestr,'FP',' 8 ');\r\nmovestr=strrep(movestr,'DP',' 9 ');\r\nmovestr=strrep(movestr,'LP',' 10 ');\r\nmovestr=strrep(movestr,'BP',' 11 ');\r\nmovestr=strrep(movestr,'RP',' 12 ');\r\nmovestr=strrep(movestr,'U2',' 13 ');\r\nmovestr=strrep(movestr,'F2',' 14 ');\r\nmovestr=strrep(movestr,'D2',' 15 ');\r\nmovestr=strrep(movestr,'L2',' 16 ');\r\nmovestr=strrep(movestr,'B2',' 17 ');\r\nmovestr=strrep(movestr,'R2',' 18 ');\r\nmovestr=strrep(movestr,'U',' 1 ');\r\nmovestr=strrep(movestr,'F',' 2 ');\r\nmovestr=strrep(movestr,'D',' 3 ');\r\nmovestr=strrep(movestr,'L',' 4 ');\r\nmovestr=strrep(movestr,'B',' 5 ');\r\nmovestr=strrep(movestr,'R',' 6 ');\r\nmovestr=strrep(movestr,'XP',' 22 ');\r\nmovestr=strrep(movestr,'YP',' 23 ');\r\nmovestr=strrep(movestr,'ZP',' 24 ');\r\nmovestr=strrep(movestr,'X2',' 25 ');\r\nmovestr=strrep(movestr,'Y2',' 26 ');\r\nmovestr=strrep(movestr,'Z2',' 27 ');\r\nmovestr=strrep(movestr,'X',' 19 ');\r\nmovestr=strrep(movestr,'Y',' 20 ');\r\nmovestr=strrep(movestr,'Z',' 21 ');\r\n\r\nmove_vec=str2num(movestr);\r\n\r\nend % move_vec\r\n\r\n\r\n%{\r\n% 3D Viewer and Development Environment\r\n\r\n\r\nfunction RubikMini_3D_2724_Solver_viewer\r\n%Rubiks Mini-Cube Play\r\n%Creator: Richard Zapor\r\n% 09/01/12\r\nclear all\r\nglobal pmap plate zCmap r  % For 3D  viewer\r\n\r\n% initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n \r\n % Map 3D platelettes and surfaces\r\n [pmap plate]=cube_faces; % One time association of array to 3D surfaces\r\n  % zCmap=[0,0,0;1,1,1;0,0,1;1,1,0;1,0,0;0,1,0;1,.6,0]; \r\n  % 1-Blk,2-Wht,3-Blu,4-Yellow,5-Red,6-Green,7-Orange\r\n  \r\n  zCmap=[0,0,0;1,0,0;1,1,1;0,0,1;1,1,0;0,1,0;1,.6,0]; \r\n  % 1-Blk,2-Red,3-Wht,4-Blu,5-Yellow,6-Green,7-Orange\r\n\r\n% Initialize 3D figure\r\nfigure(2);set(gca,'CameraPosition',[6 -2 7]); % Initial 3D setup\r\n   axis ([-1 4 -1 4 -1 4]);\r\n   axis equal % This is slow but needed for free rotate 1.2 sec\r\n   axis off\r\nview3D % Calls subroutine that produces a 3D image in figure 2\r\n\r\n% r=rubik_rot2(r,mov)\r\n% mov is 1:27;  1-6 UFDLB 7-12 U'F;D'L'B' 13-18 U2F2D2L2B2 \r\n%             22-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n\r\nfprintf('Move Entry (UFDLBRXYZ) eg U U2 U'' (or Up) or G=GoReset P=Play Q-Quit  :\\n');\r\nwhile 1 % Infinite loop\r\n str1=input('Enter Move(s):','s');\r\n if isempty(str1),continue;end\r\n movestr1=regexp(upper(strtrim(str1)),'\\s*','split');\r\n if movestr1{1}=='P',break;end\r\n if movestr1{1}=='Q',return;end\r\n if movestr1{1}=='G'\r\n  r=rnorm;\r\n  view3D\r\n  continue;\r\n end\r\n \r\n move_vec=decode27_movestr_rev001(str1);\r\n \r\n for i=1:length(move_vec) \r\n  r=rubik_rot_mini(move_vec(i),r);\r\n end\r\n% view3D\r\n\r\n \r\nend % while move manipulation practice loop\r\n\r\n% Setup Cube and Play\r\n\r\nfprintf('\\n\\nSolve Multiple Cubes\\n')\r\nzcnt=0;\r\nsum_solve=0;\r\nmin_solve=1000;\r\nmax_solve=0;\r\ntic\r\nwhile 1 % Games loop\r\n    mix=40; % Very random cube\r\n    zcnt=zcnt+1;\r\n    if zcnt\u003e100,break;end\r\n% mix=input('\\n\\nHow many random face rotations? (0=Exit) : ');\r\n% if isempty(mix),continue;end\r\n\r\n r=rnorm;\r\n % Initial mix\r\n mov=randi(18,[mix,1]); % do one create movr=randi(18,zcnt,mix) mov=movr(zcnt,:)\r\n for i=1:length(mov) \r\n  if i\u003e1 % Eliminate move undos\r\n  % f2 f2 or f f'  or f' f\r\n   if (mov(i)\u003e12 \u0026\u0026 mov(i-1)==mov(i))||(mov(i-1)\u003c7 \u0026\u0026 mov(i)==mov(i-1)+6)||...\r\n       (mov(i-1)\u003e6  \u0026\u0026 mov(i)==mov(i-1)-6)    \r\n    mov(i)=mov(i)+1;   % 1:17 map to 2:18  18 map to 1\r\n    if mov(i)==19,mov(i)=1;end\r\n   end\r\n  end\r\n  r=rubik_rot_mini(mov(i),r);\r\n end\r\n \r\n r_reset=r;\r\n \r\n solve_vec=[];\r\n \r\n % Check cube for Good face and Edges\r\n % Place on Up; Solve Cross/Corners with u u' or u2\r\n % Assures single move i solved in 1 move, may solve at bottom solid face\r\n % check\r\n \r\n% Insert Solution Code Here\r\n \r\n % Orient Cube R-L W-U B-F  RWB\r\n % Sequence thru BWO OWG GWR  to Solve Top Corners\r\n % Flip Cube to Solve Bottom Layer\r\n % Apply SpeedCube Corner Rotate Algorithms if Bot not Solid or Solved\r\n % If not solved Apply SpeedCube Corner Rotate/Move Algorithms\r\n \r\n % Orient Cube using XYZ to be RWB 3-6-9 RL-WU-BF\r\n  movestr=solve_orient_str(r);\r\n  move_vec=decode27_movestr_rev001(movestr);\r\n   \r\n  move_vec=[move_vec 20]; % add a Y to get to next face\r\n  solve_vec=[solve_vec move_vec];\r\n  \r\n  for i=1:length(move_vec) \r\n   r=rubik_rot_mini(move_vec(i),r);\r\n  end\r\n % end Orient Start Cube\r\n \r\n  % Solve Top Corners\r\n  for corners=2:4 % Solve Top corners TLFC, First Corner Solved\r\n   movestr='';\r\n%   movestr=solve_corners_str(r); % Not provided\r\n   move_vec=decode27_movestr_rev001(movestr);\r\n   \r\n   move_vec=[move_vec 20]; % add a Y to get to next face\r\n   solve_vec=[solve_vec move_vec];\r\n   \r\n   for i=1:length(move_vec) \r\n    r=rubik_rot_mini(move_vec(i),r);\r\n   end\r\n  end % corners\r\n  \r\n  % Solve Bottom by flipping to Top and running SpeedCube Sequences\r\n  \r\n  % Position Bottom to Top\r\n  r=rubik_rot_mini(25,r); % x2\r\n  solve_vec=[solve_vec 25];\r\n  \r\n  solved=0;\r\n  % Function Check u-rotate/solve\r\n  % Is Bottom layer solveable? Needs only a u u' or u2\r\n  if all(r(5:8)==r(5)) \u0026\u0026 r(1)==r(3)  \u0026\u0026 r(9)==r(11) \u0026\u0026 ...\r\n     r(21)==r(23)  \u0026\u0026 r(20)==r(18)\r\n   %Appears to have a U rotate solution\r\n   f_edge_loc=find(r([9 21 20 1])==r(10),1,'first');\r\n   %if isempty(f_edge_loc),continue;end % Bottom not solved\r\n   %if f_edge_loc==1, do nothing;end it is in right location\r\n   if f_edge_loc==2\r\n    r=rubik_rot_mini(1,r);\r\n    solve_vec=[solve_vec 1];\r\n   end\r\n   if f_edge_loc==3\r\n    r=rubik_rot_mini(13,r);\r\n    solve_vec=[solve_vec 13];\r\n   end\r\n   if f_edge_loc==4\r\n    r=rubik_rot_mini(7,r);\r\n    solve_vec=[solve_vec 7];\r\n   end\r\n   solved=1;\r\n%fprintf('U Rotate Solve Success\\n')\r\n  end % Bottom layer rotate to solve\r\n  \r\n  if ~all(r(5:8)==r(5)) % Multiple top face invalid - Try Quick full solve\r\n    movestr='';\r\n%    [movestr solved]=full_solve_bottom_str(r); % Not provided\r\n    if solved\r\n% fprintf('H Quick Full Solve Success\\n')\r\n%      view3D\r\n     move_vec=decode27_movestr_rev001(movestr);\r\n     solve_vec=[solve_vec move_vec];\r\n     for i=1:length(move_vec) \r\n      r=rubik_rot_mini(move_vec(i),r);\r\n     end\r\n%      view3D\r\n    end % Solved\r\n  end\r\n   \r\n \r\n  if ~solved % Execute Full Speed Cube Two Tier Methods\r\n    movestr='';\r\n %    movestr=solve_bottom_str(r); % Not provided\r\n    move_vec=decode27_movestr_rev001(movestr);\r\n   \r\n    solve_vec=[solve_vec move_vec];\r\n   \r\n    for i=1:length(move_vec) \r\n     r=rubik_rot_mini(move_vec(i),r);\r\n    end\r\n  end\r\n  \r\n% Normal Cube Return Point\r\n  \r\n % Verify Solution and Generate Statistics\r\n  if all(r(1:4)==r(4)) \u0026\u0026 all(r(5:8)==r(8))  \u0026\u0026 all(r(9:12)==r(9)) \u0026\u0026 ...\r\n     all(r(13:16)==r(13))  \u0026\u0026 all(r(17:20)==r(17)) \u0026\u0026 all(r(21:24)==r(21))\r\n   solve_vec(solve_vec\u003e18)=[]; % \r\n   lsolve=length(solve_vec);\r\n   sum_solve=sum_solve+lsolve;\r\n   min_solve=min(min_solve,lsolve);\r\n   max_solve=max(max_solve,lsolve);\r\n   asolve=floor(sum_solve/zcnt);\r\n   fprintf('Cube Solved Moves=%i  Avg Moves=%i min=%i  max=%i\\n',lsolve,asolve,min_solve,max_solve)\r\n  else % Deug info\r\n   fprintf('\\n\\nCube NOT Solved???\\n\\n') \r\n   fprintf('%i ',r); % Current ending data\r\n   fprintf('\\n')\r\n   fprintf('%i ',r_reset); % Starting Cube\r\n   view3D \r\n   pause(1) % Big Long pause\r\n  end\r\n  \r\nend % Games Loop\r\ntoc\r\n\r\n%view3D % appearance of final cube\r\n\r\nfprintf('\\n\\nThank You for Playing\\n\\nPlease come again.\\n')\r\n\r\nend\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction  movestr=solve_orient_str(r)\r\n% % initialize cube\r\n%  r(1:4)=0;     %Left   0 R\r\n%  r(5:8)=1;     %Up     1 W\r\n%  r(9:12)=2;    %Front  2 B\r\n%  r(13:16)=3;   %Down   3 Y\r\n%  r(17:20)=4;   %Back   4 G\r\n%  r(21:24)=5;   %Right  5 O\r\npersistent m\r\nif isempty(m) % all moves leave possibly valid corners and cross alone\r\n    % w  r  b\r\n m={[ 6  3  9  ''];\r\n    [ 8 11 21  'y'];  \r\n    [ 7 23 20  'y2']; \r\n    [ 5 18  1  'yp'];\r\n    [10  4 13  'x'];\r\n    [14  2 17  'x2'];\r\n    [18  1  5  'xp'];\r\n    [ 4 13 10  'z'];\r\n    [15 22 12  'z2'];\r\n    [21  8 11  'zp'];\r\n    [12 15 22  'zx']; \r\n    [11 21  8  'z2x'];\r\n    [ 9  6  3  'zpx'];\r\n    [ 2 17 14  'ypx'];\r\n    [ 1  5 18  'x2z'];\r\n    [ 3  9  6  'xpz'];\r\n    [22 12 15  'yx'];\r\n    [23 20  7  'xpzp'];\r\n    [24 16 19  'x2zp'];\r\n    [20  7 23  'xpy'];\r\n    [17 14  2  'ypz'];\r\n    [19 24 16  'y2x'];\r\n    [13 10  4  'yx2']; \r\n    [16 19 24  'x2y']}; \r\nend\r\n u=1; % value of top\r\n L=0; % value of left face\r\n f=2; % value of front face\r\n for ptr=1:24\r\n  if r(abs(m{ptr}(1)))==u \u0026\u0026 r(abs(m{ptr}(2)))==L \u0026\u0026 r(abs(m{ptr}(3)))==f, break;end\r\n end\r\n \r\nmovestr=m{ptr}(4:end);\r\nend % solve orient\r\n\r\nfunction move_vec=decode27_movestr_rev001(movestr)\r\n% Active character Inputs: UFDLBRXYZ, GQ are pre-processed\r\n% 1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 19-27 XYZX'Y'Z'X2Y2Z2\r\nmovestr=upper(movestr);\r\nmovestr=strrep(movestr,'''','P'); % simplify further searches\r\n\r\nmovestr=strrep(movestr,'UP',' 7 ');\r\nmovestr=strrep(movestr,'FP',' 8 ');\r\nmovestr=strrep(movestr,'DP',' 9 ');\r\nmovestr=strrep(movestr,'LP',' 10 ');\r\nmovestr=strrep(movestr,'BP',' 11 ');\r\nmovestr=strrep(movestr,'RP',' 12 ');\r\nmovestr=strrep(movestr,'U2',' 13 ');\r\nmovestr=strrep(movestr,'F2',' 14 ');\r\nmovestr=strrep(movestr,'D2',' 15 ');\r\nmovestr=strrep(movestr,'L2',' 16 ');\r\nmovestr=strrep(movestr,'B2',' 17 ');\r\nmovestr=strrep(movestr,'R2',' 18 ');\r\nmovestr=strrep(movestr,'U',' 1 ');\r\nmovestr=strrep(movestr,'F',' 2 ');\r\nmovestr=strrep(movestr,'D',' 3 ');\r\nmovestr=strrep(movestr,'L',' 4 ');\r\nmovestr=strrep(movestr,'B',' 5 ');\r\nmovestr=strrep(movestr,'R',' 6 ');\r\nmovestr=strrep(movestr,'XP',' 22 ');\r\nmovestr=strrep(movestr,'YP',' 23 ');\r\nmovestr=strrep(movestr,'ZP',' 24 ');\r\nmovestr=strrep(movestr,'X2',' 25 ');\r\nmovestr=strrep(movestr,'Y2',' 26 ');\r\nmovestr=strrep(movestr,'Z2',' 27 ');\r\nmovestr=strrep(movestr,'X',' 19 ');\r\nmovestr=strrep(movestr,'Y',' 20 ');\r\nmovestr=strrep(movestr,'Z',' 21 ');\r\n\r\nmove_vec=str2num(movestr);\r\n\r\nend % move_vec\r\n\r\nfunction view3D\r\n global pmap plate zCmap r\r\n  hold on;\r\n  for i=1:24\r\n    idx=pmap(i);\r\n    fill3(plate(i,1:4),plate(i,5:8),plate(i,9:12),zCmap(r(idx)+2,:),'LineWidth',2)  \r\n  end\r\n  hold off\r\n\r\nend\r\n\r\nfunction [pmap plate]=cube_faces()\r\n%global pmap plate\r\n% Sequence that cube faces are filled   \r\n  pmap=[ 2  4     1  3          ...\r\n        10 12     9 11          ...\r\n        24 22    23 21          ...\r\n        17 19    18 20          ...\r\n         5  7     6  8          ...\r\n        14 16    13 15          ];\r\n plate=zeros(54,12);\r\n % Could optimize creation or load from mat\r\n % Four 3D corners x1 x2 x3 x4 y1 y2 y3 y4 z1 z2 z3 z4\r\n plate(1,:)=[0 1 1 0 0 0 0 0 0 0 1 1]; \r\n plate(2,:)=[1 2 2 1 0 0 0 0 0 0 1 1]; \r\n plate(3,:)=[0 1 1 0 0 0 0 0 1 1 2 2]; \r\n plate(4,:)=[1 2 2 1 0 0 0 0 1 1 2 2]; \r\n \r\n plate(5,:)=[2 2 2 2 0 1 1 0 0 0 1 1];\r\n plate(6,:)=[2 2 2 2 1 2 2 1 0 0 1 1];\r\n plate(7,:)=[2 2 2 2 0 1 1 0 1 1 2 2];\r\n plate(8,:)=[2 2 2 2 1 2 2 1 1 1 2 2];\r\n \r\n plate(9:12,:)=plate(1:4,:);\r\n plate(9:12,5:8)=repmat(2,4,4);\r\n \r\n plate(13:16,:)=plate(5:8,:);\r\n plate(13:16,1:4)=zeros(4,4); %repmat(0,4,4); \r\n \r\n plate(17,:)=[0 1 1 0 0 0 1 1 2 2 2 2]; \r\n plate(18,:)=[0 1 1 0 1 1 2 2 2 2 2 2]; \r\n plate(19,:)=[1 2 2 1 0 0 1 1 2 2 2 2]; \r\n plate(20,:)=[1 2 2 1 1 1 2 2 2 2 2 2];\r\n\r\n plate(21:24,:)=plate(17:20,:);\r\n plate(21:24,9:12)=zeros(4,4); %repmat(0,4,4);  %\r\n  \r\nend\r\n\r\nfunction r=rubik_rot_mini(mov,r)\r\n%mov is 1:27;  1-6 UFDLBR 7-12 U'F;D'L'B'R' 13-18 U2F2D2L2B2R2 \r\n%             19-27 XYZ X'Y'Z' X2Y2Z2  \r\n% X cube-R, Y cube-U,  Z cube-F\r\n%\r\n% r is a 24 element row vector\r\n% r output is a single row vector \r\n%\r\n% vector mov\r\n% r output is array of length(mov) x 24\r\n%\r\n% Perform Rubik Cube face rotations and cube rotations\r\n% L 1:4 U 5:8 F 9:12 D 13:16 B 17:20 R 21:24 \r\n% \r\npersistent vf\r\nif isempty(vf) %\r\nvf=[ 9  2  11  4  6   8   5   7 21  10   23  12 13  14  15  16 17   3   19   1 20  22   18  24 ; \r\n     1  2  13 15  5   4   7   3 10  12    9  11 22  14  21  16 17  18   19  20  6   8   23  24 ;\r\n     1 19   3 17  5   6   7   8  9   2   11   4 14  16  13  15 24  18   22  20 21  10   23  12 ;\r\n     2  4   1  3 17  18   7   8  5   6   11  12  9  10  15  16 13  14   19  20 21  22   23  24 ;\r\n     7  5   3  4 23   6  24   8  9  10   11  12 13   1  15   2 18  20   17  19 21  22   16  14 ;\r\n     1  2   3  4  5   6  11  12  9  10   15  16 13  14  19  20 17  18    7   8 22  24   21  23 ;\r\n    20  2  18  4  7   5   8   6  1  10    3  12 13  14  15  16 17  23   19  21  9  22   11  24 ;\r\n     1  2   8  6  5  21   7  22 11   9   12  10  3  14   4  16 17  18   19  20 15  13   23  24 ;\r\n     1 10   3 12  5   6   7   8  9  22   11  24 15  13  16  14  4  18    2  20 21  19   23  17 ;\r\n     3  1   4  2  9  10   7   8 13  14   11  12 17  18  15  16  5   6   19  20 21  22   23  24 ;\r\n    14 16   3  4  2   6   1   8  9  10   11  12 13  24  15  23 19  17   20  18 21  22    5   7 ;\r\n     1  2   3  4  5   6  19  20  9  10    7   8 13  14  11  12 17  18   15  16 23  21   24  22 ;\r\n    21  2  23  4  8   7   6   5 20  10   18  12 13  14  15  16 17  11   19   9  1  22    3  24 ;\r\n     1  2  22 21  5  15   7  13 12  11   10   9  8  14   6  16 17  18   19  20  4   3   23  24 ;\r\n     1 22   3 24  5   6   7   8  9  19   11  17 16  15  14  13 12  18   10  20 21   2   23   4 ;\r\n     4  3   2  1 13  14   7   8 17  18   11  12  5   6  15  16  9  10   19  20 21  22   23  24 ;\r\n    24 23   3  4 16   6  14   8  9  10   11  12 13   7  15   5 20  19   18  17 21  22    2   1 ;\r\n     1  2   3  4  5   6  15  16  9  10   19  20 13  14   7   8 17  18   11  12 24  23   22  21 ;\r\n     3  1   4  2  9  10  11  12 13  14   15  16 17  18  19  20  5   6    7   8 22  24   21  23 ;\r\n     9 10  11 12  6   8   5   7 21  22   23  24 15  13  16  14  4   3    2   1 20  19   18  17 ;\r\n    14 16  13 15  2   4   1   3 10  12    9  11 22  24  21  23 19  17   20  18  6   8    5   7 ;\r\n     2  4   1  3 17  18  19  20  5   6    7   8  9  10  11  12 13  14   15  16 23  21   24  22 ;\r\n    20 19  18 17  7   5   8   6  1   2    3   4 14  16  13  15 24  23   22  21  9  10   11  12 ;\r\n     7  5   8  6 23  21  24  22 11   9   12  10  3   1   4   2 18  20   17  19 15  13   16  14 ;\r\n     4  3   2  1 13  14  15  16 17  18   19  20  5   6   7   8  9  10   11  12 24  23   22  21 ;\r\n    21 22  23 24  8   7   6   5 20  19   18  17 16  15  14  13 12  11   10   9  1   2    3   4 ; \r\n    24 23  22 21 16  15  14  13 12  11   10   9  8   7   6   5 20  19   18  17  4   3    2   1 ];\r\nend\r\n\r\nr=r(vf(mov,:));\r\nend\r\n\r\n\r\n\r\n%}\r\n\r\n\r\n","test_suite":"%%\r\nfeval(@assignin,'caller','score',0);\r\n%%\r\nvf=[9 2 11 4 6 8 5 7 21 10 23 12 13 14 15 16 17 3 19 1 20 22 18 24 ; \r\n    1 2 13 15 5 4 7 3 10 12 9 11 22 14 21 16 17 18 19 20 6 8 23 24 ;\r\n    1 19 3 17 5 6 7 8 9 2 11 4 14 16 13 15 24 18 22 20 21 10 23 12 ;\r\n    2 4 1 3 17 18 7 8 5 6 11 12 9 10 15 16 13 14 19 20 21 22 23 24 ;\r\n    7 5 3 4 23 6 24 8 9 10 11 12 13 1 15 2 18 20 17 19 21 22 16 14 ;\r\n    1 2 3 4 5 6 11 12 9 10 15 16 13 14 19 20 17 18 7 8 22 24 21 23 ;\r\n    20 2 18 4 7 5 8 6 1 10 3 12 13 14 15 16 17 23 19 21 9 22 11 24 ;\r\n    1 2 8 6 5 21 7 22 11 9 12 10 3 14 4 16 17 18 19 20 15 13 23 24 ;\r\n    1 10 3 12 5 6 7 8 9 22 11 24 15 13 16 14 4 18 2 20 21 19 23 17 ;\r\n    3 1 4 2 9 10 7 8 13 14 11 12 17 18 15 16 5 6 19 20 21 22 23 24 ;\r\n    14 16 3 4 2 6 1 8 9 10 11 12 13 24 15 23 19 17 20 18 21 22 5 7 ;\r\n    1 2 3 4 5 6 19 20 9 10 7 8 13 14 11 12 17 18 15 16 23 21 24 22 ;\r\n    21 2 23 4 8 7 6 5 20 10 18 12 13 14 15 16 17 11 19 9 1 22 3 24 ;\r\n    1 2 22 21 5 15 7 13 12 11 10 9 8 14 6 16 17 18 19 20 4 3 23 24 ;\r\n    1 22 3 24 5 6 7 8 9 19 11 17 16 15 14 13 12 18 10 20 21 2 23 4 ;\r\n    4 3 2 1 13 14 7 8 17 18 11 12 5 6 15 16 9 10 19 20 21 22 23 24 ;\r\n    24 23 3 4 16 6 14 8 9 10 11 12 13 7 15 5 20 19 18 17 21 22 2 1 ;\r\n    1 2 3 4 5 6 15 16 9 10 19 20 13 14 7 8 17 18 11 12 24 23 22 21 ;\r\n    3 1 4 2 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 22 24 21 23 ;\r\n    9 10 11 12 6 8 5 7 21 22 23 24 15 13 16 14 4 3 2 1 20 19 18 17 ;\r\n    14 16 13 15 2 4 1 3 10 12 9 11 22 24 21 23 19 17 20 18 6 8 5 7 ;\r\n    2 4 1 3 17 18 19 20 5 6 7 8 9 10 11 12 13 14 15 16 23 21 24 22 ;\r\n    20 19 18 17 7 5 8 6 1 2 3 4 14 16 13 15 24 23 22 21 9 10 11 12 ;\r\n    7 5 8 6 23 21 24 22 11 9 12 10 3 1 4 2 18 20 17 19 15 13 16 14 ;\r\n    4 3 2 1 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 24 23 22 21 ;\r\n    21 22 23 24 8 7 6 5 20 19 18 17 16 15 14 13 12 11 10 9 1 2 3 4 ; \r\n    24 23 22 21 16 15 14 13 12 11 10 9 8 7 6 5 20 19 18 17 4 3 2 1 ];\r\n\r\n%r=r(vf(mov,:));  % Standard move, r=rubik_rot_min(mov,r);\r\n\r\nPass=1;\r\nr_fail=0;\r\n% Execute 500 cubes and verify completeness and count moves\r\n % initialize cube\r\n r(1:4)=0;     %Left   0 R\r\n r(5:8)=1;     %Up     1 W\r\n r(9:12)=2;    %Front  2 B\r\n r(13:16)=3;   %Down   3 Y\r\n r(17:20)=4;   %Back   4 G\r\n r(21:24)=5;   %Right  5 O\r\n rnorm=r;\r\n\r\nzcnt=0;\r\nsum_solve=0;\r\nmin_solve=1000;\r\nmax_solve=0;\r\nasolve=199;\r\nmix=40;\r\n\r\ntic\r\n\r\nwhile zcnt\u003c500\r\n zcnt=zcnt+1;\r\n  r=rnorm;\r\n % Initial mix\r\n mov=randi(18,[mix,1]);\r\n for i=1:length(mov)  % Ignoring Move Undos since mix=40\r\n  %r=rubik_rot(mov(i),r);\r\n   r=r(vf(mov(i),:));\r\n end\r\n\r\n r_reset=r; % Used in assert\r\n\r\n solve_vec=rubik_solve_mini(r);\r\n\r\n for i=1:length(solve_vec) \r\n  %r=rubik_rot(solve_vec(i),r);\r\n  r=r(vf(solve_vec(i),:));\r\n end\r\n\r\n  if all(r(1:4)==r(4)) \u0026\u0026 all(r(5:8)==r(8))  \u0026\u0026 all(r(9:12)==r(9)) \u0026\u0026 ...\r\n     all(r(13:16)==r(13))  \u0026\u0026 all(r(17:20)==r(17)) \u0026\u0026 all(r(21:24)==r(21))\r\n   solve_vec(solve_vec\u003e18)=[]; %   \r\n   lsolve=length(solve_vec);\r\n   sum_solve=sum_solve+lsolve;\r\n   min_solve=min(min_solve,lsolve);\r\n   max_solve=max(max_solve,lsolve);\r\n   asolve=floor(sum_solve/zcnt);\r\n %  fprintf('Cube Solved Moves=%i  Avg Moves=%i min=%i  max=%i\\n',lsolve,asolve,min_solve,max_solve)\r\n  else % Deug info\r\n   Pass=0;\r\n   r_fail=r_reset;\r\n  % fprintf('\\n\\nCube NOT Solved???\\n\\n') \r\n  % fprintf('%i ',r); % Current ending data\r\n  % fprintf('\\n')\r\n  % fprintf('%i ',r_reset); % Starting Cube\r\n  end\r\n\r\nend % while of cubes\r\ntoc\r\n\r\nassert(isequal(Pass,1),sprintf('%i ',r_fail)); % Output Non-Solved Cube Start\r\nif Pass\r\n feval(@assignin,'caller','score',min(100,floor(asolve)));\r\nend\r\n\r\nfprintf('Moves: Avg %i   Min %i   Max %i\\n',asolve,min_solve,max_solve)","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":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-09-04T03:44:49.000Z","updated_at":"2025-04-22T03:20:12.000Z","published_at":"2012-09-04T05:01: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\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image2.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image1.gif\"}],\"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 Challenge is to Solve a thoroughly scrambled Mini-Rubik's Cube(2x2x2).\u003c/w:t\u003e\u003c/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 Performance metric is average number of moves for solving 500 cubes.\u003c/w:t\u003e\u003c/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\u003eA standard Mini-Rubik's Cube is shown in 3-D and also unfolded to identify the specific Tile-face/Vector numbering.\u003c/w:t\u003e\u003c/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 faces are White-Up / Red-Left / Blue-Front / Orange-Right / Yellow-Down / Green-Back (ULFRDB)\u003c/w:t\u003e\u003c/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\u003eMoves are denoted as F for clockwise rotation of the Front face. F'(or FP) is CCW and F2 is F twice. The provided function r_new=rubick_rot_mini(mov,r) implements moves 1-18: UFDLBRU'F'D'L'B'R'U2F2D2L2B2R2.\u003c/w:t\u003e\u003c/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: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=\\\"rId2\\\"/\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: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=\\\"rId3\\\"/\u003e\u003c/w:customXmlPr\u003e\u003c/w:customXml\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[Input: (rubik)\\n\\nrubik: row vector of size 24\\n(The cube started [L=0,U=1,F=2,D=3,B=4,R=5] and then receives forty face moves.\\n\\nOutput: move_vec (Numeric of moves to solve)\\n move_vec:values 1:27 for UFDLBR U'F'D'L'B'R' U2F2D2L2B2R2 XYZX'Y'Z'X2Y2Z2]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf the cube was randomized by [1 9] UD', one solution is [3 7] which are the complements in reverse order.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eScoring is average face moves for 500 cubes\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eCube Moves X, Y, and Z do not constitute a move but are needed in the vector\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eA string to numeric value function is provided in the template\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eVerifications will be by executing your move vector against the provided Rubik and counting number of face moves.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe function rubik_rot_mini(mov,r) is provided in the template.\u003c/w:t\u003e\u003c/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 Function Template Contains a 3D Cube Viewer and the first step in solving is at the bottom in a comment block.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Theory: 20-moves Any Cube\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://peter.stillhq.com/jasmine/rubikscubesolution.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eGeneral Cube Info and Middle Layer\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=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/final_layer_print.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpeedCube Bottom Sequences\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e(Note: Mini-Cube can use the full cube moves and ignore edge effects)\u003c/w:t\u003e\u003c/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\u003eComing Soon: The Mini-Cube (2x2x2): Full Random - Eleven or Less Moves\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.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image1.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"}]}"},{"id":702,"title":"Play Tic Tac Toe : No Losses Allowed","description":"Let's play a friendly game of Tic Tac Toe \r\n\r\nCreate an efficient algorithm to Never Lose.\r\n\r\nThe Player may be either the first or second to play.\r\n\r\nInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\r\n\r\nPlayer output is an integer 1:9 to identify array index position\r\n\r\n 1 4 7\r\n 2 5 8\r\n 3 6 9\r\n\r\nExample game play:\r\n\r\n Input:        [1 0 0; 0 0 0; 0 0 0]  % Computer playing first in this example\r\n Output:        5                     % Player return value\r\n Yields :      [1 0 0; 0 2 0; 0 0 0]  % Computer then picks position 2.\r\n Second Input: [1 0 0; 1 2 0; 0 0 0]  % Computer's second move shown.\r\n\r\nPassing score is never losing.\r\n\r\nThe contest engine is almost Random - about 4000 times. (\u003c12% of Time-Out)\r\n\r\nCreating the perfect tic-tac-toe engine seemed unnecessary.\r\n\r\nYour Wins/Losses/Draws will be shown.\r\n\r\nOn a loss the losing board will be shown\r\n\r\nFollow-up game will be WOPR:Global Thermonuclear War.","description_html":"\u003cp\u003eLet's play a friendly game of Tic Tac Toe\u003c/p\u003e\u003cp\u003eCreate an efficient algorithm to Never Lose.\u003c/p\u003e\u003cp\u003eThe Player may be either the first or second to play.\u003c/p\u003e\u003cp\u003eInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\u003c/p\u003e\u003cp\u003ePlayer output is an integer 1:9 to identify array index position\u003c/p\u003e\u003cpre\u003e 1 4 7\r\n 2 5 8\r\n 3 6 9\u003c/pre\u003e\u003cp\u003eExample game play:\u003c/p\u003e\u003cpre\u003e Input:        [1 0 0; 0 0 0; 0 0 0]  % Computer playing first in this example\r\n Output:        5                     % Player return value\r\n Yields :      [1 0 0; 0 2 0; 0 0 0]  % Computer then picks position 2.\r\n Second Input: [1 0 0; 1 2 0; 0 0 0]  % Computer's second move shown.\u003c/pre\u003e\u003cp\u003ePassing score is never losing.\u003c/p\u003e\u003cp\u003eThe contest engine is almost Random - about 4000 times. (\u0026lt;12% of Time-Out)\u003c/p\u003e\u003cp\u003eCreating the perfect tic-tac-toe engine seemed unnecessary.\u003c/p\u003e\u003cp\u003eYour Wins/Losses/Draws will be shown.\u003c/p\u003e\u003cp\u003eOn a loss the losing board will be shown\u003c/p\u003e\u003cp\u003eFollow-up game will be WOPR:Global Thermonuclear War.\u003c/p\u003e","function_template":"function p = tic_tac_toe(x)\r\n  p = 1;\r\nend","test_suite":"%%\r\n%Tic Tac Toe : Never Lose\r\ndraws=0;\r\nwins=0;\r\nPass=1;\r\nfor i=1:2000 % Computer First;  2001-4000 Player First\r\n if Pass==0,break;end\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n\r\n% Random unless Win presents itself\r\n  v0=find(x==0)';\r\n  t1=x;\r\n  t1(t1==2)=-2; % Player pips set to -2\r\n% Check for Win Option\r\n wc=find(sum(t1)==2); % column with a win\r\n if ~isempty(wc)\r\n  p=intersect((1:3)+3*(wc-1),v0);\r\n end\r\n wr=find(sum(t1,2)==2); % row with a win\r\n if ~isempty(wr)\r\n  p=intersect((1:3:7)+(wr-1),v0);\r\n end\r\n% Diagonal Win Options\r\nif x(5)==1\r\n if x(1)==1 \u0026\u0026 x(9)==0,p=9;end\r\n if x(9)==1 \u0026\u0026 x(1)==0,p=1;end\r\n if x(3)==1 \u0026\u0026 x(7)==0,p=7;end\r\n if x(7)==1 \u0026\u0026 x(3)==0,p=3;end\r\nend\r\n% end of Win check\r\n   \r\n   \r\n   \r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win % Computer Wins on its move : Match Over\r\n   Pass=0;\r\n   x\r\n   break;\r\n  end \r\n  \r\n  % Draw check Post computer move (9th move)\r\n  if sum(x(:))\u003e=13,\r\n   draws=draws+1;\r\n   break;\r\n  end\r\n  \r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  if x(p(1))~=0,Pass=0;end % Invalid move - Game over\r\n  x(p(1))=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move\r\n  \r\n  \r\n end % gameover while 1:2000\r\nend % Games 1:2000\r\n\r\n\r\nfor i=1:2000 % Player First;  2001-40000 Player First\r\n if Pass==0,break;end\r\n x=zeros(3);\r\n while true % exit on win or filled board\r\n  % Implement player move and Check for Win\r\n  p=tic_tac_toe(x);\r\n  if x(p(1))~=0,Pass=0;end % Invalid move - Game over\r\n  x(p(1))=2;\r\n  wt=x;\r\n  wt(wt==1)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==6);\r\n  if win\r\n   wins=wins+1;\r\n   break;\r\n  end % Player Wins on their move\r\n  \r\n  \r\n  % Draw check Post Player move (9th move)\r\n  if sum(x(:))\u003e=13,\r\n   draws=draws+1;\r\n   break;\r\n  end\r\n  \r\n  % Computer Move\r\n   found=0;\r\n   while ~found\r\n    p=floor(9*rand)+1;\r\n    if x(p)==0,break;end\r\n   end\r\n  \r\n% Random unless Win presents itself\r\n  v0=find(x==0)';\r\n  t1=x;\r\n  t1(t1==2)=-2; % Player pips set to -2\r\n% Check for Win Option\r\n wc=find(sum(t1)==2); % column with a win\r\n if ~isempty(wc)\r\n  p=intersect((1:3)+3*(wc-1),v0);\r\n end\r\n wr=find(sum(t1,2)==2); % row with a win\r\n if ~isempty(wr)\r\n  p=intersect((1:3:7)+(wr-1),v0);\r\n end\r\n% Diagonal Win Options\r\nif x(5)==1\r\n if x(1)==1 \u0026\u0026 x(9)==0,p=9;end\r\n if x(9)==1 \u0026\u0026 x(1)==0,p=1;end\r\n if x(3)==1 \u0026\u0026 x(7)==0,p=7;end\r\n if x(7)==1 \u0026\u0026 x(3)==0,p=3;end\r\nend\r\n% end of Win check\r\n   \r\n  % Implement Computer move and Check for Win\r\n  x(p)=1;\r\n  wt=x;\r\n  wt(wt==2)=0;\r\n  win=any([sum(wt) sum(wt,2)' trace(wt) trace(fliplr(wt))]==3);\r\n  if win % Computer Wins on its move : Match Over\r\n   Pass=0;\r\n   x\r\n   break;\r\n  end \r\n  \r\n  \r\n end % gameover while 1:2000\r\nend % Games 1:2000\r\nwins\r\ndraws\r\nPass\r\nassert(isequal(Pass,1))\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":11,"test_suite_updated_at":"2012-05-23T04:19:50.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-19T23:49:07.000Z","updated_at":"2026-01-04T12:38:00.000Z","published_at":"2012-05-20T00:36:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003eLet's play a friendly game of Tic Tac Toe\u003c/w:t\u003e\u003c/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\u003eCreate an efficient algorithm to Never Lose.\u003c/w:t\u003e\u003c/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 Player may be either the first or second to play.\u003c/w:t\u003e\u003c/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\u003eInitial board is zeros(3). Computer moves are 1s and Player moves are 2s.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer output is an integer 1:9 to identify array index position\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 4 7\\n 2 5 8\\n 3 6 9]]\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 game play:\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[ Input:        [1 0 0; 0 0 0; 0 0 0]  % Computer playing first in this example\\n Output:        5                     % Player return value\\n Yields :      [1 0 0; 0 2 0; 0 0 0]  % Computer then picks position 2.\\n Second Input: [1 0 0; 1 2 0; 0 0 0]  % Computer's second move shown.]]\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\u003ePassing score is never losing.\u003c/w:t\u003e\u003c/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 contest engine is almost Random - about 4000 times. (\u0026lt;12% of Time-Out)\u003c/w:t\u003e\u003c/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\u003eCreating the perfect tic-tac-toe engine seemed unnecessary.\u003c/w:t\u003e\u003c/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\u003eYour Wins/Losses/Draws will be shown.\u003c/w:t\u003e\u003c/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\u003eOn a loss the losing board will be shown\u003c/w:t\u003e\u003c/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\u003eFollow-up game will be WOPR:Global Thermonuclear War.\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":715,"title":"Chezz_015 : Simplified chess","description":"Chezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\r\n\r\nSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\r\n\r\nChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\r\n\r\n\r\n*Inputs:* (b,pmv,castle)\r\n\r\nPlayer always appears to be White. However, Black may apparently move first.\r\n\r\nb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\r\n\r\npmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\r\n\r\ncastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\r\n\r\n\r\n\r\n*Output:* mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\r\n\r\n\r\n\r\nThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\r\n\r\n*Passing:* Player must Win both games\r\n\r\n*Evolution:* Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\r\n\r\n\r\nChezz_015: Pawn Serial Attack - Will capture and Promote\r\n\r\nLink update 12/27/12","description_html":"\u003cp\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/p\u003e\u003cp\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\u003c/p\u003e\u003cp\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (b,pmv,castle)\u003c/p\u003e\u003cp\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/p\u003e\u003cp\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/p\u003e\u003cp\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/p\u003e\u003cp\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/p\u003e\u003cp\u003eThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e Player must Win both games\u003c/p\u003e\u003cp\u003e\u003cb\u003eEvolution:\u003c/b\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/p\u003e\u003cp\u003eChezz_015: Pawn Serial Attack - Will capture and Promote\u003c/p\u003e\u003cp\u003eLink update 12/27/12\u003c/p\u003e","function_template":"function mv=player_move(b,pmv,castle)\r\n% Author: Richard Z\r\n% Bot name: First Pawn Attack\r\n% Chezz_015\r\n% http://tinyurl.com/matlab-chezz-Cmove015\r\n%\r\n% 0-wht 1-Blk; board 8x8, opponents last move, \r\n% castle vector(8 40 64 1 33 57) 0=has moved, 1=eligible\r\n mv=zeros(1,3); % [from to promo] \r\n % mv =[39 37 0] is e4\r\n % pmv (opponents last move) is used for en passant\r\n % [0 0 0] is invalid move or first move of game\r\n % castle is used to castle yourself or see if opponent may castle\r\n \r\n pieces=1:6;\r\n enemy=7:12;\r\n\r\n pv=find(b==1);\r\n no_move=true;\r\n ptr=0;\r\n \r\n % loop thru pawns types; capture L/R or Move up\r\n \r\n while no_move\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  if ismember(r,[1 8]),continue;end % end row for a P\r\n  if c==1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n  end\r\n  if c==8\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  if c\u003c8 \u0026\u0026 c\u003e1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  \r\n  % Move fwd\r\n  if b(pv(ptr)-1)==0\r\n   mv=[pv(ptr) pv(ptr)-1 6];\r\n   return;\r\n  end\r\n  \r\n end % while no move\r\n\r\nend % End of Computer Champion Bot","test_suite":"%%\r\n% Load in the routines that play the game and check move validity\r\ntic\r\nurlwrite('http://rmatlabtest.appspot.com/Chezz_Shell.m','Chezz_Shell.m') ;\r\nurlwrite('http://rmatlabtest.appspot.com/ghost_white.m','ghost_white.m') \r\nurlwrite('http://rmatlabtest.appspot.com/computer_move015.m','computer_move.m') \r\nurlwrite('http://rmatlabtest.appspot.com/mov_chk.m','mov_chk.m') \r\nrehash path\r\ntoc\r\n%%\r\n% Play Two Chezz games\r\n% Player must win Twice to Pass\r\nglobal pmvout1 pmvout2\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% P 1/7 R 2/8 N 3/9 B 4/10 Q 5/11 K 6/12 \r\n b(2,:)=7;\r\n b(1,:)=[8 9 10 11 12 10 9 8]; % Player 7:12\r\n b(7,:)=1;\r\n b(8,:)=b(1,:)-6; % Computer 1:6\r\n b_orig=b;\r\n \r\n %mv=zeros(1,3); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n castle=[1 1 1 1 1 1];\r\n % False move call to satisfy Cody Rqmt of TestSuite match Ref Solution\r\n mv=player_move(b,pmv,castle)\r\n  \r\n for computer_wht=0:1\r\n  pmvout1=pmv; % Store game 1 moves\r\n  \r\n  dbg=0;\r\n  game_over=false;\r\n  b=b_orig;\r\n  no_capture=0;\r\n  b_hist=zeros(102,8,8);\r\n  pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n  castle=[1 1 1 1 1 1]; % History of if ever moved w/b Castles/kings\r\n %  idx 8 40 64  1 33 57\r\n \r\n while ~game_over\r\n  mvP=zeros(1,3); % [from to type/promote)] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  \r\n  [mv]=Chezz_Shell(0,b,mvP,pmv(end,:),castle,3); % 0 Wht,..., 3 Check\r\n  pmv=[pmv;mv(1:3)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n     b(mv(2))=b(mv(1)); % potential promotion\r\n     b(mv(1))=0;\r\n     if ismember(b(mv(2)),[1 7])\r\n      if ismember(mv(2),[1:8:57 8:8:64])\r\n       b(mv(2))=mv(3); % Place promoted selection\r\n      end\r\n     end\r\n     \r\n   else % ep or castle by White\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=6;\r\n      if mv(2)==24\r\n        b(8)=0;b(32)=2;  \r\n      else\r\n        b(64)=0;b(48)=2;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=1; % White Pawn\r\n      b(mv(2)+1)=0; % Take pawn that passed\r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n  %b % display board after move\r\n  \r\n  if isempty(find(b==12,1))\r\n   % Game over : Black King Captured\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer King; Player is Wht captured Blk King \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=zeros(1,4); % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Chezz_Shell(1,b,mvP,pmv(end,:),castle,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:3)];\r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(b(mv(2)),[1 7])\r\n     if ismember(mv(2),[1:8:57 8:8:64])\r\n      b(mv(2))=mv(3); % Place promoted selection\r\n     end\r\n    end\r\n   else % ep or castle by Black\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=12;\r\n      if mv(2)==49 % Blk 0-0\r\n        b(57)=0;b(41)=8;  \r\n      else % Blk 0-0-0\r\n        b(1)=0;b(25)=8;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep by Black\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=mv(3);\r\n    % White passed black on prior move\r\n      b(mv(2)-1)=0; \r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n%   b\r\n%   figure(1);imagesc(b,[0 12]);axis equal;\r\n  \r\n  if isempty(find(b==6,1))\r\n   % Game over : Blk captured White King\r\n   game_over=true;\r\n   if computer_wht==0 % Wht Computer King; Player is Blk captured Wht King\r\n    wins=wins+1;\r\n   end\r\n   continue\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n   % Check for 3 position repetition\r\n   for i=1:no_capture-1\r\n    cdelta=0;\r\n    for j=i+1:no_capture\r\n     delta=(b_hist(i,:,:)-b_hist(j,:,:));\r\n     if sum(abs(delta(:)))==0\r\n      cdelta=cdelta+1;\r\n     end\r\n    end\r\n    if cdelta\u003e=7 % repetitions 3 identical setups\r\n     fprintf('Game over due to repetition\\n');\r\n     game_over=true;\r\n    end\r\n   end % rep check loop \r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n\r\npmvout2=pmv;\r\nwins\r\n \r\n% Player must win Twice to Pass\r\ntoc\r\nassert(isequal(wins,2))\r\n\r\n%%\r\nglobal pmvout1 pmvout2\r\n% Output moves for games\r\n\r\n% Output game 2 moves\r\npmv=pmvout1;\r\n   for i=2:3:size(pmv,1)-3\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n   end\r\n   fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end,:));\r\n \r\n% Output game 2 moves\r\npmv=pmvout2;\r\n for i=2:3:size(pmv,1)-3\r\n  fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n  end\r\n% repeat of moves\r\n fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end,:));","published":true,"deleted":false,"likes_count":1,"comments_count":1,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":"2012-12-27T22:40:04.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-24T04:58:57.000Z","updated_at":"2012-12-27T22:50:08.000Z","published_at":"2012-05-24T05:15:44.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/w:t\u003e\u003c/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\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \\\"a4\\\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 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\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/w:t\u003e\u003c/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 (b,pmv,castle)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/w:t\u003e\u003c/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\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/w:t\u003e\u003c/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\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/w:t\u003e\u003c/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\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 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: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 mv [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/w:t\u003e\u003c/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 Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/w:t\u003e\u003c/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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player must Win both games\u003c/w:t\u003e\u003c/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\u003eEvolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/w:t\u003e\u003c/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\u003eChezz_015: Pawn Serial Attack - Will capture and Promote\u003c/w:t\u003e\u003c/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\u003eLink update 12/27/12\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":726,"title":"Chezz_020 Pawn Attack and Slaying King","description":"Chezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\r\n\r\nSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\r\n\r\nChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\r\n\r\n\r\n*Inputs:* (b,pmv,castle)\r\n\r\nPlayer always appears to be White. However, Black may apparently move first.\r\n\r\nb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\r\n\r\npmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\r\n\r\ncastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\r\n\r\n\r\n\r\n*Output:* mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\r\n\r\n\r\n\r\nThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\r\n\r\n*Passing:* Player must Win both games\r\n\r\n*Evolution:* Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\r\n\r\nChezz_020: Pawn Attack then Mad King Attack\r\n\r\nLink update 12/27/12","description_html":"\u003cp\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/p\u003e\u003cp\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\u003c/p\u003e\u003cp\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (b,pmv,castle)\u003c/p\u003e\u003cp\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/p\u003e\u003cp\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/p\u003e\u003cp\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/p\u003e\u003cp\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/p\u003e\u003cp\u003eThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e Player must Win both games\u003c/p\u003e\u003cp\u003e\u003cb\u003eEvolution:\u003c/b\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/p\u003e\u003cp\u003eChezz_020: Pawn Attack then Mad King Attack\u003c/p\u003e\u003cp\u003eLink update 12/27/12\u003c/p\u003e","function_template":"function mv=player_move(b,pmv,castle)\r\n% Author: Richard Z\r\n% Bot name: First Pawn then King Attack\r\n% Chezz_020\r\n% http://tinyurl.com/matlab-chezz-Cmove020\r\n mv=zeros(1,3); % [from to promo] \r\n% This is your opponent\r\n\r\n pieces=1:6;\r\n enemy=7:12;\r\n \r\n king_mv=[7 8 9 -1 1 -9 -8 -7]; %\r\n king_attack=[-9 -8 -7 -1 1 7 8 9]; %\r\n \r\n pv=find(b==1); % vector of Pawns\r\n no_move=true;\r\n ptr=0;\r\n \r\n % loop thru piece types\r\n \r\n while no_move % Pawn\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  if ismember(r,[1 8]),continue;end % end row for a P\r\n  if c==1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n  end\r\n  if c==8\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  if c\u003c8 \u0026\u0026 c\u003e1\r\n   if ismember(b(pv(ptr)+7),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+7 6];\r\n    return;\r\n   end\r\n   if ismember(b(pv(ptr)-9),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)-9 6];\r\n    return;\r\n   end\r\n  end\r\n  \r\n  % Move fwd\r\n  if b(pv(ptr)-1)==0\r\n   mv=[pv(ptr) pv(ptr)-1 6];\r\n   return;\r\n  end\r\n  \r\n end % while no move Pawn\r\n\r\n% No pawn move found; Move on to King\r\n\r\n% No pawn moves left: Attack with King\r\n\r\npv=find(b==6); % Find Kings\r\nno_move=true;\r\nptr=0;\r\n\r\nwhile no_move % King captures\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  for i=1:8 % 8 King attacks\r\n   if (pv(ptr)+king_attack(i)\u003e64) || (pv(ptr)+king_attack(i)\u003c1),continue;end\r\n   if r==1 \u0026\u0026 ismember(i,[1 4 6]),continue;end % make ~ismem 1:64\r\n   if r==8 \u0026\u0026 ismember(i,[3 5 8]),continue;end\r\n   if c==1 \u0026\u0026 ismember(i,[1 2 3]),continue;end\r\n   if c==8 \u0026\u0026 ismember(i,[6 7 8]),continue;end\r\n   if ismember(b(pv(ptr)+king_attack(i)),enemy) % capture\r\n    mv=[pv(ptr) pv(ptr)+king_attack(i) 0]; % errant r1 attack idx 1 to idx 8\r\n    return; % Attack found\r\n   end\r\n  end % 8 King attacks\r\nend % while King capture search\r\n\r\n% No King capture move found\r\nmyk=pv(1); % First King\r\nek=find(b==max(enemy),1); %Find an enemy king\r\n[kr1 kc1]=ind2sub([8 8],myk);\r\n[er1 ec1]=ind2sub([8 8],ek);\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[7 8 -1 9 -9 -8 1 -7];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[9 8  1 -7 7 -8 -1 -9];end\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-9 -1 -8 -7 7 8 1 9];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-7 1 -8 9 -9 8 -1 7];end\r\nfor i=1:8\r\n if kr1==1 \u0026\u0026 ismember(king_mv(i),[-9 -1 7]),continue;end\r\n if kr1==8 \u0026\u0026 ismember(king_mv(i),[-7 1 9]),continue;end\r\n if kc1==1 \u0026\u0026 ismember(king_mv(i),[-9 -8 -7]),continue;end\r\n if kc1==8 \u0026\u0026 ismember(king_mv(i),[7 8 9]),continue;end\r\n if ismember(b(myk+king_mv(i)),0) % empty\r\n  mv=[myk myk+king_mv(i) 0];\r\n  return; % path found\r\n end\r\nend\r\n% Hopefully don't get here as mv=[0 0 0]\r\n\r\nend % End of Computer Champion Bot","test_suite":"%%\r\n% Load in the routines that play the game and check move validity\r\ntic\r\nurlwrite('http://rmatlabtest.appspot.com/Chezz_Shell.m','Chezz_Shell.m') ;\r\nurlwrite('http://rmatlabtest.appspot.com/ghost_white.m','ghost_white.m') \r\nurlwrite('http://rmatlabtest.appspot.com/computer_move020.m','computer_move.m') \r\nurlwrite('http://rmatlabtest.appspot.com/mov_chk.m','mov_chk.m') \r\nrehash path\r\ntoc\r\n%%\r\n% Play Two Chezz games\r\n% Player must win Twice to Pass\r\nglobal pmvout1 pmvout2\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% P 1/7 R 2/8 N 3/9 B 4/10 Q 5/11 K 6/12 \r\n b(2,:)=7;\r\n b(1,:)=[8 9 10 11 12 10 9 8]; % Player 7:12\r\n b(7,:)=1;\r\n b(8,:)=b(1,:)-6; % Computer 1:6\r\n b_orig=b;\r\n \r\n %mv=zeros(1,3); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n castle=[1 1 1 1 1 1];\r\n % False move call to satisfy Cody Rqmt of TestSuite match Ref Solution\r\n mv=player_move(b,pmv,castle)\r\n  \r\n for computer_wht=0:1\r\n  pmvout1=pmv; % Store game 1 moves\r\n  \r\n  dbg=0;\r\n  game_over=false;\r\n  b=b_orig;\r\n  no_capture=0;\r\n  b_hist=zeros(102,8,8);\r\n  pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n  castle=[1 1 1 1 1 1]; % History of if ever moved w/b Castles/kings\r\n %  idx 8 40 64  1 33 57\r\n \r\n while ~game_over\r\n  mvP=zeros(1,3); % [from to type/promote)] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  \r\n  [mv]=Chezz_Shell(0,b,mvP,pmv(end,:),castle,3); % 0 Wht,..., 3 Check\r\n  pmv=[pmv;mv(1:3)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n     b(mv(2))=b(mv(1)); % potential promotion\r\n     b(mv(1))=0;\r\n     if ismember(b(mv(2)),[1 7])\r\n      if ismember(mv(2),[1:8:57 8:8:64])\r\n       b(mv(2))=mv(3); % Place promoted selection\r\n      end\r\n     end\r\n     \r\n   else % ep or castle by White\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=6;\r\n      if mv(2)==24\r\n        b(8)=0;b(32)=2;  \r\n      else\r\n        b(64)=0;b(48)=2;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=1; % White Pawn\r\n      b(mv(2)+1)=0; % Take pawn that passed\r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n  %b % display board after move\r\n  \r\n  if isempty(find(b==12,1))\r\n   % Game over : Black King Captured\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer King; Player is Wht captured Blk King \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=zeros(1,4); % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Chezz_Shell(1,b,mvP,pmv(end,:),castle,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:3)];\r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(b(mv(2)),[1 7])\r\n     if ismember(mv(2),[1:8:57 8:8:64])\r\n      b(mv(2))=mv(3); % Place promoted selection\r\n     end\r\n    end\r\n   else % ep or castle by Black\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=12;\r\n      if mv(2)==49 % Blk 0-0\r\n        b(57)=0;b(41)=8;  \r\n      else % Blk 0-0-0\r\n        b(1)=0;b(25)=8;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep by Black\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=mv(3);\r\n    % White passed black on prior move\r\n      b(mv(2)-1)=0; \r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n%   b\r\n%   figure(1);imagesc(b,[0 12]);axis equal;\r\n  \r\n  if isempty(find(b==6,1))\r\n   % Game over : Blk captured White King\r\n   game_over=true;\r\n   if computer_wht==0 % Wht Computer King; Player is Blk captured Wht King\r\n    wins=wins+1;\r\n   end\r\n   continue\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n   % Check for 3 position repetition\r\n   for i=1:no_capture-1\r\n    cdelta=0;\r\n    for j=i+1:no_capture\r\n     delta=(b_hist(i,:,:)-b_hist(j,:,:));\r\n     if sum(abs(delta(:)))==0\r\n      cdelta=cdelta+1;\r\n     end\r\n    end\r\n    if cdelta\u003e=7 % repetitions 3 identical setups\r\n     fprintf('Game over due to repetition\\n');\r\n     game_over=true;\r\n    end\r\n   end % rep check loop \r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n\r\npmvout2=pmv;\r\nwins\r\n \r\n% Player must win Twice to Pass\r\ntoc\r\nassert(isequal(wins,2))\r\n\r\n%%\r\nglobal pmvout1 pmvout2\r\n% Output moves for games\r\n\r\n% Output game 2 moves\r\npmv=pmvout1;\r\n   for i=2:3:size(pmv,1)-3\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n   end\r\n   fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end,:));\r\n \r\n% Output game 2 moves\r\npmv=pmvout2;\r\n for i=2:3:size(pmv,1)-3\r\n  fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n  end\r\n% repeat of moves\r\n fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end,:));","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":1,"test_suite_updated_at":"2012-12-27T22:44:29.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-28T06:59:32.000Z","updated_at":"2012-12-27T22:44:29.000Z","published_at":"2012-05-28T07:41:09.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\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/w:t\u003e\u003c/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\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \\\"a4\\\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 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\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/w:t\u003e\u003c/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 (b,pmv,castle)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/w:t\u003e\u003c/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\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/w:t\u003e\u003c/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\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/w:t\u003e\u003c/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\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 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: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 mv [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/w:t\u003e\u003c/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 Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/w:t\u003e\u003c/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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player must Win both games\u003c/w:t\u003e\u003c/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\u003eEvolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/w:t\u003e\u003c/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\u003eChezz_020: Pawn Attack then Mad King Attack\u003c/w:t\u003e\u003c/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\u003eLink update 12/27/12\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":727,"title":"Checkerz_000 Kamikazi Kings","description":"Checkerz: A simplified single jump checkers game between a computer bot and a player bot. Multiple jumps are not allowed.\r\n\r\nThe setup requires the player to copy the entire template into his solution.\r\n\r\nThe template includes a Shell routine that call the Player, Computer, and the Jump Check routines for move validation.\r\n\r\nThe player writes his Bot under the player_move routine.\r\n\r\nThe player will always appear to be playing as White.\r\nThe players pieces are 1-Pawn and 2-King.\r\n\r\nThe Computer pieces will appear as 3-Pawn and 4-King.\r\n\r\nThe board is a standard 8x8 with empty squares as 0.\r\n\r\nThe player move is an array index from-to. eg mv=[8 15].  Value range 1 to 64.\r\n\r\nThe routine find_jumps will provide all potential jumps.\r\n\r\nIf a jump(s) may occur then one must be used. eg mv=[8 22] which jumps a piece on 15.\r\n\r\nAn invalid move or a missed jump is a Loss.\r\n\r\n*Input:* Board  8x8 array \r\n\r\n*Output:* Move  [index_from  index_to]\r\n\r\nTo Pass requires Winning Twice. Once as first move and once as second move.\r\n\r\n100 No-capture move series is a Draw\r\n\r\nMoves will be displayed\r\n\r\nCheckerz_000 Kamikazi_Kings: Random Pawn moves and Kings will hunt the enemy.","description_html":"\u003cp\u003eCheckerz: A simplified single jump checkers game between a computer bot and a player bot. Multiple jumps are not allowed.\u003c/p\u003e\u003cp\u003eThe setup requires the player to copy the entire template into his solution.\u003c/p\u003e\u003cp\u003eThe template includes a Shell routine that call the Player, Computer, and the Jump Check routines for move validation.\u003c/p\u003e\u003cp\u003eThe player writes his Bot under the player_move routine.\u003c/p\u003e\u003cp\u003eThe player will always appear to be playing as White.\r\nThe players pieces are 1-Pawn and 2-King.\u003c/p\u003e\u003cp\u003eThe Computer pieces will appear as 3-Pawn and 4-King.\u003c/p\u003e\u003cp\u003eThe board is a standard 8x8 with empty squares as 0.\u003c/p\u003e\u003cp\u003eThe player move is an array index from-to. eg mv=[8 15].  Value range 1 to 64.\u003c/p\u003e\u003cp\u003eThe routine find_jumps will provide all potential jumps.\u003c/p\u003e\u003cp\u003eIf a jump(s) may occur then one must be used. eg mv=[8 22] which jumps a piece on 15.\u003c/p\u003e\u003cp\u003eAn invalid move or a missed jump is a Loss.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Board  8x8 array\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Move  [index_from  index_to]\u003c/p\u003e\u003cp\u003eTo Pass requires Winning Twice. Once as first move and once as second move.\u003c/p\u003e\u003cp\u003e100 No-capture move series is a Draw\u003c/p\u003e\u003cp\u003eMoves will be displayed\u003c/p\u003e\u003cp\u003eCheckerz_000 Kamikazi_Kings: Random Pawn moves and Kings will hunt the enemy.\u003c/p\u003e","function_template":"function mv = Checkerz_Shell(wht_blk,b,mv,ptr)\r\n % Copy this into Players function entry\r\n %figure(1);imagesc(b,[-2 4]);axis equal\r\n %pause(0.1)\r\n \r\n % Remap routine so Engines always think they are White\r\n bv=zeros(8,8); % form of 8x8\r\n bv(1:64)=1:64;\r\n %pmap=(1:4); % [WP WK BP BK]\r\n if wht_blk==1 % Invert Player Perspective\r\n  [b,mv,bv]=ghost_white(b,mv,bv);\r\n end\r\n \r\n % Call Algorithm - White based\r\n % Un-Map to Black if required\r\n \r\n switch ptr\r\n     case {1}\r\n         mv=computer_move(b);\r\n% Self play\r\n% mv=player_move(b);\r\n     case {2}\r\n         mv=player_move(b);\r\n     case {3}\r\n         mv=mov_chk(b,mv);\r\n end % switch ptr\r\n \r\n %Remap mv to Black or leave unchanged if White\r\n if ismember(mv(1),1:64),mv(1)=bv(mv(1));end\r\n if ismember(mv(2),1:64),mv(2)=bv(mv(2));end\r\n \r\nend % Checkerz_Shell\r\n\r\nfunction [b,mv,bv]=ghost_white(b,mv,bv)\r\n% Map Blk to Wht to process \r\n  bv=rot90(rot90(bv)); % Board re-map\r\n  pmap=[3 4 1 2]; % Piece re-map to WP WK BP BK\r\n  \r\n  b=rot90(rot90(b));\r\n  v=find(b\u003e0);\r\n  b(v)=pmap(b(v));\r\n  \r\n  v=find(mv(1:2)\u003e0);\r\n  mv(v)=bv(mv(v));\r\n  \r\nend\r\n\r\nfunction [jv]=find_jumps(b)\r\n jv=[];\r\n P=find(b==1);\r\n K=find(b==2);\r\n \r\n Pjv=ones(64,2);\r\n Pjv = bsxfun(@times, Pjv, [-18 14]); % TL TR\r\n Pjv(1:18,:)=bsxfun(@times,Pjv(1:18,:),[0 1]);\r\n Pjv(2:8:58,:)=bsxfun(@times,Pjv(2:8:58,:),[0 0]);\r\n Pjv(50:64,:)=bsxfun(@times,Pjv(50:64,:),[1 0]);\r\n Pjv([1:2:7 10:2:16 17:2:23],:)=bsxfun(@times,Pjv([1:2:7 10:2:16 17:2:23],:),[0 0]);\r\n Pjv([26:2:32 33:2:39 42:2:48],:)=bsxfun(@times,Pjv([26:2:32 33:2:39 42:2:48],:),[0 0]);\r\n Pjv([49:2:55 58:2:64],:)=bsxfun(@times,Pjv([49:2:55 58:2:64],:),[0 0]);\r\n \r\n Kjv=ones(64,4);\r\n Kjv = bsxfun(@times, Kjv, [14 18 -14 -18]); % TR BR BL TL\r\n Kjv([2 9],:)=bsxfun(@times,Kjv([2 9],:),[0 1 0 0]);\r\n Kjv([4 6 11 13],:)=bsxfun(@times,Kjv([4 6 11 13],:),[1 1 0 0]);\r\n Kjv([8 15],:)=bsxfun(@times,Kjv([8 15],:),[1 0 0 0]);\r\n Kjv([18 25 34 41],:)=bsxfun(@times,Kjv([18 25 34 41],:),[0 1 1 0]);\r\n Kjv([24 31 40 47],:)=bsxfun(@times,Kjv([24 31 40 47],:),[1 0 0 1]);\r\n Kjv([50 57],:)=bsxfun(@times,Kjv([50 57],:),[0 0 1 0]);\r\n Kjv([52 54 59 61],:)=bsxfun(@times,Kjv([52 54 59 61],:),[0 0 1 1]);\r\n Kjv([56 63],:)=bsxfun(@times,Kjv([56 63],:),[0 0 0 1]);\r\n Kjv([1:2:7 10:2:16 17:2:23],:)=bsxfun(@times,Kjv([1:2:7 10:2:16 17:2:23],:),[0 0 0 0]);\r\n Kjv([26:2:32 33:2:39 42:2:48],:)=bsxfun(@times,Kjv([26:2:32 33:2:39 42:2:48],:),[0 0 0 0]);\r\n Kjv([49:2:55 58:2:64],:)=bsxfun(@times,Kjv([49:2:55 58:2:64],:),[0 0 0 0]);\r\n \r\n for i=1:length(P)\r\n  Pi=P(i);\r\n  for j=1:2\r\n   if Pjv(Pi,j)==0,continue;end\r\n   if b(Pi+Pjv(Pi,j))==0 \u0026\u0026 b(Pi+Pjv(Pi,j)/2)\u003e2\r\n    jv=[jv;Pi Pi+Pjv(Pi,j)];\r\n   end\r\n  end\r\n end\r\n \r\n \r\n \r\n for i=1:length(K)\r\n  Ki=K(i);\r\n  for j=1:4\r\n   if Kjv(Ki,j)==0,continue;end\r\n   if b(Ki+Kjv(Ki,j))==0 \u0026\u0026 b(Ki+Kjv(Ki,j)/2)\u003e2\r\n    jv=[jv;Ki K(i)+Kjv(Ki,j)];\r\n   end\r\n  end\r\n end\r\n\r\n \r\nend\r\n\r\n function mv=player_move(b)\r\n % Copy Checkerz_Shell, computer_move, and mov_chk functions into entry  \r\n % Create Player entry inside this function\r\n %\r\n % Author: Your Name\r\n % Bot name:  Your Bot's Nmae\r\n\r\n mv=[0 0]; % [from to] \r\n \r\n% Introduction function to avoid missing jumps\r\n% Player may modify. This is informational jumps only\r\n jv=find_jumps(b);\r\n if ~isempty(jv)\r\n  mv=jv(1,:); % Use the first jump\r\n  return\r\n end\r\n\r\n % End of Player entry\r\n end % End of Player Bot\r\n\r\nfunction mv=computer_move(b)\r\n% Author: Richard Z\r\n% Bot name: Kamikazi : Jump, Pmove, Kattack, Kmove \r\n% Checkerz_000\r\n mv=[0 0]; % [from to] \r\n \r\n jv=find_jumps(b);\r\n if ~isempty(jv)\r\n  mv=jv(1,:); % Use the first jump\r\n  return\r\n end\r\n\r\n % Pawn\r\n pv=find(b==1); % vector of Pawns\r\n %if ~isempty(pv),pv=pv(randperm(length(pv)));end\r\n ptr=0;\r\n while true % Pawn\r\n  pm=[-9 7];\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(pv),break;end\r\n  [r c]=ind2sub([8 8],pv(ptr));\r\n  if c==1, pm=pm.*[0 1];end\r\n  if c==8,pm=pm.*[1 0];end\r\n  \r\n  for i=1:2\r\n   if b(pv(ptr)+pm(i))==0\r\n    mv=[pv(ptr) pv(ptr)+pm(i)];\r\n    return\r\n   end\r\n  end\r\n end % while no move Pawn\r\n \r\n \r\n % No King capture move found\r\nmyk=find(b==2,1); % First King\r\nep=find(b\u003e2,1); %Find an enemy piece, Pawns or Kings\r\n[kr1 kc1]=ind2sub([8 8],myk);\r\n[er1 ec1]=ind2sub([8 8],ep);\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[7 9 -9 -7];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003e=kc1,king_mv=[9 7 -7 -9];end\r\nif er1\u003c=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-9 7 -7 9];end\r\nif er1\u003e=kr1 \u0026\u0026 ec1\u003c=kc1,king_mv=[-7 9 -9 7];end\r\nfor i=1:4\r\n if kr1==1 \u0026\u0026 ismember(king_mv(i),[-9 7]),continue;end\r\n if kr1==8 \u0026\u0026 ismember(king_mv(i),[-7 9]),continue;end\r\n if kc1==1 \u0026\u0026 ismember(king_mv(i),[-9 -7]),continue;end\r\n if kc1==8 \u0026\u0026 ismember(king_mv(i),[7 9]),continue;end\r\n if b(myk+king_mv(i))==0 % empty square\r\n  mv=[myk myk+king_mv(i)];\r\n  return; % path found\r\n end\r\nend\r\n \r\n% Can I get here if I have a King?\r\n % King\r\n kv=find(b==2); % vector of Kings\r\n %if ~isempty(pv),pv=pv(randperm(length(pv)));end\r\n ptr=0;\r\n while true % King\r\n  km=[7 9 -7 -9];\r\n  ptr=ptr+1;\r\n  if ptr\u003elength(kv),break;end\r\n  [r c]=ind2sub([8 8],kv(ptr));\r\n  if c==1, km=km.*[1 1 0 0];end\r\n  if c==8, km=km.*[0 0 1 1];end\r\n  if r==1, km=km.*[0 1 1 0];end\r\n  if r==8, km=km.*[1 0 0 1];end\r\n  \r\n  \r\n  for i=1:4\r\n   if b(kv(ptr)+km(i))==0\r\n    mv=[kv(ptr) kv(ptr)+km(i)];\r\n    return\r\n   end\r\n  end\r\n end % while no move King\r\n \r\n \r\n% Hopefully don't get here as mv=[0 0] and we lose\r\n\r\nend % End of Computer Bot\r\n\r\nfunction mv_out=mov_chk(b,mv)\r\n % Improvement of mov_chk will be a separate Cody challenge\r\n % Must Copy into Solution Entry\r\n % Invalid move returns [0 0]\r\n mv_out=[0 0]; % default is Invalid\r\n \r\n % verify valid: Entry, Color, Possible capture\r\n if ~ismember(mv(1),1:64) || ~ismember(mv(2),1:64),return;end % Invalid mv\r\n if ~ismember(b(mv(1)),(1:2)),return;end % Moving Wrong team\r\n  % Must move to empty square\r\n if b(mv(2))~=0,return;end\r\n \r\n  \r\n delta=mv(2)-mv(1); % Movement vector\r\n if ~ismember(delta,[7 9 14 18 -7 -9 -14 -18]),return;end % Invalid mv\r\n \r\n msum=mv(1)+mv(2); % Jump midpoint if jump check\r\n \r\n  % use for move checks\r\n [r1 c1]=ind2sub([8 8],mv(1));\r\n [r2 c2]=ind2sub([8 8],mv(2));\r\n \r\n if abs(r1-r2)\u003e2,return;end % Invalid\r\n if abs(c1-c2)\u003e2,return;end % Invalid\r\n   \r\n jv=find_jumps(b);\r\n\r\n if ~isempty(jv)\r\n  if abs(delta)\u003c14,return;end % Jump not executed\r\n end\r\n \r\n \r\n if abs(delta)\u003e13 % Jump claimed\r\n  if b(msum/2)\u003c3,return;end % Invalid Jump -Own or Empty\r\n  \r\n  if b(mv(1))==1 \u0026\u0026 (delta==-18 ||delta==14)\r\n   mv_out=mv; % Valid move\r\n   return;\r\n  end % Legal P Jump\r\n  \r\n  if b(mv(1))==2 \u0026\u0026 (abs(delta)==18 || abs(delta)==14)\r\n   mv_out=mv; % Valid move\r\n   return;\r\n  end % Legal K Jump\r\n  \r\n  return; % Invalid Jump\r\n end % Jump\r\n \r\n % abs(delta)\u003c12 Regular move\r\n if b(mv(1))==1 \u0026\u0026 (delta==-9 ||delta==7)\r\n  mv_out=mv; % Valid move\r\n  return;\r\n end % Legal P mv\r\n \r\n if b(mv(1))==2 \u0026\u0026 (abs(delta)==9 || abs(delta) ==7)\r\n  mv_out=mv; % Valid move\r\n  return;\r\n end % Legal K mv\r\n \r\n mv_out=[0 0]; % Checks failed\r\nend\r\n","test_suite":"%%\r\n%Test Suite\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% WP 1 BP 3  [WK 2 BK 4] \r\n b([2 9 11 18 25 27 34 41 43 50 57 59])=3;\r\n b([6 8 15 22 24 31 38 40 47 54 56 63])=1;\r\n b_orig=b;\r\n \r\n %mv=zeros(1,2); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,2); % Move History for record only\r\n  \r\n for computer_wht=0:1\r\n  if size(pmv,1)\u003e3\r\n   for i=1:4:size(pmv,1)-4\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i\\n',pmv(i,1:2),pmv(i+1,1:2),pmv(i+2,1:2),pmv(i+3,1:2));\r\n   end\r\n   fprintf('%2i %2i\\n',pmv(end-3,:));\r\n   fprintf('%2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i\\n',pmv(end,:));\r\n % Output game 1 moves\r\n  end\r\n  %pmv % Output move history from Game 1\r\n  game_over=false;\r\n  b=b_orig; % Reset for second game\r\n  no_capture=0;\r\n  pmv=zeros(1,2); % [from to promo)] Opponents last move\r\n \r\n while ~game_over\r\n  mvP=zeros(1,2); % [from to] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Checkerz_Shell(0,b,mvP,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Checkerz_Shell(0,b,mvP,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  [mv]=Checkerz_Shell(0,b,mvP,3); % 0 Wht,..., 3 Check\r\n  \r\n  pmv=[pmv;mv(1:2)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk \r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(mv(2),[9 25 41 57])\r\n     b(mv(2))=2; % Kinged\r\n    end\r\n    if abs(mv(1)-mv(2))\u003e9\r\n     % Piece jumped\r\n     capture=true;\r\n     b((mv(1)+mv(2))/2)=0;\r\n    end\r\n  end % end move\r\n  \r\n  if isempty(find(b\u003e2)) % White has captured All Blk Pieces\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer Loses; Player is Wht \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  if mv(1)==0 % No legal move or missed jump\r\n   % Game over : White failed to move and Loses\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==0 % Wht Computer Loses; Player is Blk \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n    \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end %\r\n  else\r\n   no_capture=1;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=[0 0]; % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Checkerz_Shell(1,b,mvP,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Checkerz_Shell(1,b,mvP,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Checkerz_Shell(1,b,mvP,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:2)];\r\n \r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk \r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(mv(2),[8 24 40 56])\r\n     b(mv(2))=4; % Kinged\r\n    end\r\n    if abs(mv(1)-mv(2))\u003e9\r\n     % Piece jumped\r\n     capture=true;\r\n     b((mv(1)+mv(2))/2)=0;\r\n    end\r\n  end % end move\r\n  \r\n  if isempty([find(b==1)' find(b==2)']) % Black has captured All Wht Pieces\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==0 % Wht Computer Loses; Player is Blk \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  if mv(1)==0 % No legal move or missed jump by Black\r\n   % Game over : Black failed to move correctly and Loses\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer Loses; Player is Wht \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n  else\r\n   no_capture=1;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n \r\n wins\r\n   if size(pmv,1)\u003e3\r\n    for i=1:4:size(pmv,1)-4\r\n     fprintf('%2i %2i %2i %2i %2i %2i %2i %2i\\n',pmv(i,1:2),pmv(i+1,1:2),pmv(i+2,1:2),pmv(i+3,1:2));\r\n    end\r\n    fprintf('%2i %2i\\n',pmv(end-3,:));\r\n    fprintf('%2i %2i\\n',pmv(end-2,:));\r\n    fprintf('%2i %2i\\n',pmv(end-1,:));\r\n    fprintf('%2i %2i\\n',pmv(end,:));\r\n % Output game 2 moves?\r\n  end\r\n \r\nwins\r\ntoc\r\n\r\n % Player must beat computer twice\r\n %assert(isequal(wins,2))\r\n \r\nPass=1;\r\nassert(isequal(Pass,1))","published":true,"deleted":false,"likes_count":0,"comments_count":0,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":3,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-30T03:08:30.000Z","updated_at":"2012-05-30T03:20:09.000Z","published_at":"2012-05-30T03:17:56.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\u003eCheckerz: A simplified single jump checkers game between a computer bot and a player bot. Multiple jumps are not 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\u003eThe setup requires the player to copy the entire template into his 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 template includes a Shell routine that call the Player, Computer, and the Jump Check routines for move validation.\u003c/w:t\u003e\u003c/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 player writes his Bot under the player_move routine.\u003c/w:t\u003e\u003c/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 player will always appear to be playing as White. The players pieces are 1-Pawn and 2-King.\u003c/w:t\u003e\u003c/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 Computer pieces will appear as 3-Pawn and 4-King.\u003c/w:t\u003e\u003c/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 board is a standard 8x8 with empty squares as 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\u003eThe player move is an array index from-to. eg mv=[8 15]. Value range 1 to 64.\u003c/w:t\u003e\u003c/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 routine find_jumps will provide all potential jumps.\u003c/w:t\u003e\u003c/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 a jump(s) may occur then one must be used. eg mv=[8 22] which jumps a piece on 15.\u003c/w:t\u003e\u003c/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 invalid move or a missed jump is a Loss.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Board 8x8 array\u003c/w:t\u003e\u003c/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 Move [index_from index_to]\u003c/w:t\u003e\u003c/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 Pass requires Winning Twice. Once as first move and once as second 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:t\u003e100 No-capture move series is a Draw\u003c/w:t\u003e\u003c/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\u003eMoves will be displayed\u003c/w:t\u003e\u003c/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\u003eCheckerz_000 Kamikazi_Kings: Random Pawn moves and Kings will hunt the enemy.\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":916,"title":"Rubik's Cube : Solve Ten Face Move - Speed Scoring","description":"A set of cubes will be scrambled with 10 Face moves.\r\nThe Challenge is to Solve all Cubes in 10 Moves or Less.\r\nScore will be by cumulative time of cubes 2 thru 11. The first cube may be used to load arrays but is still required to solve the cube.\r\nTen moves relates to worst case 18^10 configs - 3.6e12. In actuality there are only 2.4e11 cubes at 10 turns. Brute force might not work.\r\n\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/cube_small.gif\u003e\u003e\r\n\r\n\u003c\u003chttps://sites.google.com/site/razapor/matlab_cody/Cube_Map48_200.png\u003e\u003e\r\n\r\n\u003c\u003chttp://mathworks.com/matlabcentral/images/surf.gif\u003e\u003e\r\n\r\n\r\n.\r\n\r\n*Input:* Cube vector (1x48](see Figure) with values 0:5, eight of each\r\n\r\n*Output:* Rotation Vector of 10 or less values. Values range from 1:18\r\n\r\nValues 1:18 represent the standard cube moves:ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\r\n\r\n*Example:* Move of FL[2 4]  requires L'F' solv_vec=[10 8] at a minimum to solve\r\n\r\nCube=[00303003 44410110 11022222 22253533 53344444 11155555] as integer array\r\n\r\nsolv_vec=[10 8]\r\n\r\nActual solutions will be 8 to 10 values.\r\n\r\n\r\nThe Cube sites claim a capability of solving 10 moves in only 40 hrs.\r\nNot sure if they have Matlab, which can achieve 10 moves in \u003c0.15 sec. Matlab with a 16GB/i5 can solve 12 moves in \u003c 1.8 seconds. Unfortunately, Cody appears to have a memory/processing speed issue which makes the 11 and 12 move Challenges impossible.\r\n\r\n\u003chttp://kociemba.org/cube.htm Cube Org\u003e  and \u003chttp://www.speedcubing.com/CubeSolver/CubeSolver.html Speed Cubing\u003e\r\n\r\nThe next Cube Challenge will be to solve a fully randomized cube in as few moves as possible. With this next challenge I'll post my 3D-Cube Viewer Tool used for algorithm development.\r\n ","description_html":"\u003cp\u003eA set of cubes will be scrambled with 10 Face moves.\r\nThe Challenge is to Solve all Cubes in 10 Moves or Less.\r\nScore will be by cumulative time of cubes 2 thru 11. The first cube may be used to load arrays but is still required to solve the cube.\r\nTen moves relates to worst case 18^10 configs - 3.6e12. In actuality there are only 2.4e11 cubes at 10 turns. Brute force might not work.\u003c/p\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/cube_small.gif\"\u003e\u003cimg src=\"https://sites.google.com/site/razapor/matlab_cody/Cube_Map48_200.png\"\u003e\u003cimg src=\"http://mathworks.com/matlabcentral/images/surf.gif\"\u003e\u003cp\u003e.\u003c/p\u003e\u003cp\u003e\u003cb\u003eInput:\u003c/b\u003e Cube vector (1x48](see Figure) with values 0:5, eight of each\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e Rotation Vector of 10 or less values. Values range from 1:18\u003c/p\u003e\u003cp\u003eValues 1:18 represent the standard cube moves:ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\u003c/p\u003e\u003cp\u003e\u003cb\u003eExample:\u003c/b\u003e Move of FL[2 4]  requires L'F' solv_vec=[10 8] at a minimum to solve\u003c/p\u003e\u003cp\u003eCube=[00303003 44410110 11022222 22253533 53344444 11155555] as integer array\u003c/p\u003e\u003cp\u003esolv_vec=[10 8]\u003c/p\u003e\u003cp\u003eActual solutions will be 8 to 10 values.\u003c/p\u003e\u003cp\u003eThe Cube sites claim a capability of solving 10 moves in only 40 hrs.\r\nNot sure if they have Matlab, which can achieve 10 moves in \u0026lt;0.15 sec. Matlab with a 16GB/i5 can solve 12 moves in \u0026lt; 1.8 seconds. Unfortunately, Cody appears to have a memory/processing speed issue which makes the 11 and 12 move Challenges impossible.\u003c/p\u003e\u003cp\u003e\u003ca href=\"http://kociemba.org/cube.htm\"\u003eCube Org\u003c/a\u003e  and \u003ca href=\"http://www.speedcubing.com/CubeSolver/CubeSolver.html\"\u003eSpeed Cubing\u003c/a\u003e\u003c/p\u003e\u003cp\u003eThe next Cube Challenge will be to solve a fully randomized cube in as few moves as possible. With this next challenge I'll post my 3D-Cube Viewer Tool used for algorithm development.\u003c/p\u003e","function_template":"function solv_vec = Rubik_Solve_10(cube)\r\n  solv_vec=[1 2 3 4 5 6 7 8 9 10 11];\r\n\r\nvf=[ 17 2 3 20 5 22 7 8 11 13 16 10 15 9 12 14 41 18 19 44 21 46 23 24 25 26 27 28 29 30 31 32 33 34 6 36 4 38 39 1 40 42 43 37 45 35 47 48; \r\n  1 2 3 4 5 25 28 30 9 10 8 12 7 14 15 6 19 21 24 18 23 17 20 22 43 26 27 42 29 41 31 32 33 34 35 36 37 38 39 40 11 13 16 44 45 46 47 48 ;\r\n  1 2 38 4 36 6 7 33 9 10 11 12 13 14 15 16 17 18 3 20 5 22 23 8 27 29 32 26 31 25 28 30 48 34 35 45 37 43 39 40 41 42 19 44 21 46 47 24 ;\r\n  3 5 8 2 7 1 4 6 33 34 35 12 13 14 15 16 9 10 11 20 21 22 23 24 17 18 19 28 29 30 31 32 25 26 27 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  14 12 9 4 5 6 7 8 46 10 11 47 13 48 15 16 17 18 19 20 21 22 23 24 25 26 1 28 2 30 31 3 35 37 40 34 39 33 36 38 41 42 43 44 45 32 29 27 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 22 23 24 17 18 19 20 21 30 31 32 25 26 27 28 29 38 39 40 33 34 35 36 37 14 15 16 43 45 48 42 47 41 44 46 ;\r\n  40 2 3 37 5 35 7 8 14 12 9 15 10 16 13 11 1 18 19 4 21 6 23 24 25 26 27 28 29 30 31 32 33 34 46 36 44 38 39 41 17 42 43 20 45 22 47 48 ;\r\n  1 2 3 4 5 16 13 11 9 10 41 12 42 14 15 43 22 20 17 23 18 24 21 19 6 26 27 7 29 8 31 32 33 34 35 36 37 38 39 40 30 28 25 44 45 46 47 48 ;\r\n  1 2 19 4 21 6 7 24 9 10 11 12 13 14 15 16 17 18 43 20 45 22 23 48 30 28 25 31 26 32 29 27 8 34 35 5 37 3 39 40 41 42 38 44 36 46 47 33 ;\r\n  6 4 1 7 2 8 5 3 17 18 19 12 13 14 15 16 25 26 27 20 21 22 23 24 33 34 35 28 29 30 31 32 9 10 11 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  27 29 32 4 5 6 7 8 3 10 11 2 13 1 15 16 17 18 19 20 21 22 23 24 25 26 48 28 47 30 31 46 38 36 33 39 34 40 37 35 41 42 43 44 45 9 12 14 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 38 39 40 17 18 19 20 21 14 15 16 25 26 27 28 29 22 23 24 33 34 35 36 37 30 31 32 46 44 41 47 42 48 45 43 ;\r\n  41 2 3 44 5 46 7 8 16 15 14 13 12 11 10 9 40 18 19 37 21 35 23 24 25 26 27 28 29 30 31 32 33 34 22 36 20 38 39 17 1 42 43 4 45 6 47 48 ;\r\n  1 2 3 4 5 43 42 41 9 10 30 12 28 14 15 25 24 23 22 21 20 19 18 17 16 26 27 13 29 11 31 32 33 34 35 36 37 38 39 40 8 7 6 44 45 46 47 48 ;\r\n  1 2 43 4 45 6 7 48 9 10 11 12 13 14 15 16 17 18 38 20 36 22 23 33 32 31 30 29 28 27 26 25 24 34 35 21 37 19 39 40 41 42 3 44 5 46 47 8 ;\r\n  8 7 6 5 4 3 2 1 25 26 27 12 13 14 15 16 33 34 35 20 21 22 23 24 9 10 11 28 29 30 31 32 17 18 19 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  48 47 46 4 5 6 7 8 32 10 11 29 13 27 15 16 17 18 19 20 21 22 23 24 25 26 14 28 12 30 31 9 40 39 38 37 36 35 34 33 41 42 43 44 45 3 2 1 ; \r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 30 31 32 17 18 19 20 21 38 39 40 25 26 27 28 29 14 15 16 33 34 35 36 37 22 23 24 48 47 46 45 44 43 42 41 ];\r\n\r\n% Basic move is implemented using the rot table\r\n% cube=cube(vf(mov,:)); % mov is 1:18 represents  ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\r\n% Note: only the 48 moving cube tiles are mapped\r\n% a solved cube displays as [000000001111111122222222333333334444444455555555]\r\n\r\nend","test_suite":"%%\r\n% Load max score of 50 seconds\r\nfeval(@assignin,'caller','score',50)\r\n%%\r\nglobal vf gPass\r\nPass=1;\r\n% Load rot map 18 moves : ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\r\n vf=[ 17 2 3 20 5 22 7 8 11 13 16 10 15 9 12 14 41 18 19 44 21 46 23 24 25 26 27 28 29 30 31 32 33 34 6 36 4 38 39 1 40 42 43 37 45 35 47 48; \r\n  1 2 3 4 5 25 28 30 9 10 8 12 7 14 15 6 19 21 24 18 23 17 20 22 43 26 27 42 29 41 31 32 33 34 35 36 37 38 39 40 11 13 16 44 45 46 47 48 ;\r\n  1 2 38 4 36 6 7 33 9 10 11 12 13 14 15 16 17 18 3 20 5 22 23 8 27 29 32 26 31 25 28 30 48 34 35 45 37 43 39 40 41 42 19 44 21 46 47 24 ;\r\n  3 5 8 2 7 1 4 6 33 34 35 12 13 14 15 16 9 10 11 20 21 22 23 24 17 18 19 28 29 30 31 32 25 26 27 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  14 12 9 4 5 6 7 8 46 10 11 47 13 48 15 16 17 18 19 20 21 22 23 24 25 26 1 28 2 30 31 3 35 37 40 34 39 33 36 38 41 42 43 44 45 32 29 27 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 22 23 24 17 18 19 20 21 30 31 32 25 26 27 28 29 38 39 40 33 34 35 36 37 14 15 16 43 45 48 42 47 41 44 46 ;\r\n  40 2 3 37 5 35 7 8 14 12 9 15 10 16 13 11 1 18 19 4 21 6 23 24 25 26 27 28 29 30 31 32 33 34 46 36 44 38 39 41 17 42 43 20 45 22 47 48 ;\r\n  1 2 3 4 5 16 13 11 9 10 41 12 42 14 15 43 22 20 17 23 18 24 21 19 6 26 27 7 29 8 31 32 33 34 35 36 37 38 39 40 30 28 25 44 45 46 47 48 ;\r\n  1 2 19 4 21 6 7 24 9 10 11 12 13 14 15 16 17 18 43 20 45 22 23 48 30 28 25 31 26 32 29 27 8 34 35 5 37 3 39 40 41 42 38 44 36 46 47 33 ;\r\n  6 4 1 7 2 8 5 3 17 18 19 12 13 14 15 16 25 26 27 20 21 22 23 24 33 34 35 28 29 30 31 32 9 10 11 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  27 29 32 4 5 6 7 8 3 10 11 2 13 1 15 16 17 18 19 20 21 22 23 24 25 26 48 28 47 30 31 46 38 36 33 39 34 40 37 35 41 42 43 44 45 9 12 14 ;\r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 38 39 40 17 18 19 20 21 14 15 16 25 26 27 28 29 22 23 24 33 34 35 36 37 30 31 32 46 44 41 47 42 48 45 43 ;\r\n  41 2 3 44 5 46 7 8 16 15 14 13 12 11 10 9 40 18 19 37 21 35 23 24 25 26 27 28 29 30 31 32 33 34 22 36 20 38 39 17 1 42 43 4 45 6 47 48 ;\r\n  1 2 3 4 5 43 42 41 9 10 30 12 28 14 15 25 24 23 22 21 20 19 18 17 16 26 27 13 29 11 31 32 33 34 35 36 37 38 39 40 8 7 6 44 45 46 47 48 ;\r\n  1 2 43 4 45 6 7 48 9 10 11 12 13 14 15 16 17 18 38 20 36 22 23 33 32 31 30 29 28 27 26 25 24 34 35 21 37 19 39 40 41 42 3 44 5 46 47 8 ;\r\n  8 7 6 5 4 3 2 1 25 26 27 12 13 14 15 16 33 34 35 20 21 22 23 24 9 10 11 28 29 30 31 32 17 18 19 36 37 38 39 40 41 42 43 44 45 46 47 48 ;\r\n  48 47 46 4 5 6 7 8 32 10 11 29 13 27 15 16 17 18 19 20 21 22 23 24 25 26 14 28 12 30 31 9 40 39 38 37 36 35 34 33 41 42 43 44 45 3 2 1 ; \r\n  1 2 3 4 5 6 7 8 9 10 11 12 13 30 31 32 17 18 19 20 21 38 39 40 25 26 27 28 29 14 15 16 33 34 35 36 37 22 23 24 48 47 46 45 44 43 42 41 ];\r\n\r\nr=ones(1,48,'uint8'); \r\n r(1:8)=0; %5;     %Left % straight numeric mapping\r\n r(9:16)=1; %2;   %Up\r\n r(17:24)=2; %3;   %Front\r\n r(25:32)=3; %4;   %Down\r\n r(33:40)=4; %6;   %Back\r\n r(41:48)=5; %7; %Right\r\n \r\nmix=10;\r\nrmov=randi(18,[mix,1]);\r\n for i=1:length(rmov) \r\n  if i\u003e1 % Eliminate move undos\r\n  % f2 f2 or f f'  or f' f\r\n   if (rmov(i)\u003e12 \u0026\u0026 rmov(i-1)==rmov(i))||(rmov(i-1)\u003c7 \u0026\u0026 rmov(i)==rmov(i-1)+6)||...\r\n       (rmov(i-1)\u003e6  \u0026\u0026 rmov(i)==rmov(i-1)-6)    \r\n    rmov(i)=rmov(i)+1;   % 1:17 map to 2:18  18 map to 1\r\n    if rmov(i)==19,rmov(i)=1;end\r\n   end\r\n  end\r\n  r=r(vf(rmov(i),:));\r\n end\r\n\r\n\r\n%assert(isequal(your_fcn_name(x),y_correct))\r\n\r\nt0=clock;\r\nsolv_vec=Rubik_Solve_10(r)\r\ndt=etime(clock,t0)\r\n% Dubious Code Check\r\nif all(r(1:8)==r(1)) \u0026\u0026 all(r(9:16)==r(9))  \u0026\u0026 all(r(17:24)==r(17)) \u0026\u0026 ...\r\n     all(r(25:32)==r(25))  \u0026\u0026 all(r(33:40)==r(33)) \u0026\u0026 all(r(41:48)==r(41))\r\n Pass=0;\r\nend\r\n\r\nPass=Pass \u0026\u0026 length(solv_vec\u003c11);\r\n\r\nlength(solv_vec)\r\nrt=r;\r\nfor i=1:length(solv_vec)\r\n   rt=rt(vf(solv_vec(i),:));\r\n end\r\n if all(rt(1:8)==rt(1)) \u0026\u0026 all(rt(9:16)==rt(9))  \u0026\u0026 all(rt(17:24)==rt(17)) \u0026\u0026 ...\r\n     all(rt(25:32)==rt(25))  \u0026\u0026 all(rt(33:40)==rt(33)) \u0026\u0026 all(rt(41:48)==rt(41))\r\n   fprintf('Cube Solved\\n')\r\n  Pass=Pass; % No change to Pass status\r\n else\r\n  fprintf('Cube Solve Failure\\n')\r\n  Pass=0;\r\n end\r\n\r\nassert(isequal(Pass,1))\r\n\r\ngPass=Pass;\r\n\r\n%%\r\n\r\nglobal gPass vf\r\nPass1=gPass;\r\n\r\n\r\nr=ones(1,48,'uint8'); \r\n r(1:8)=0; %5;     %Left % straight numeric mapping\r\n r(9:16)=1; %2;   %Up\r\n r(17:24)=2; %3;   %Front\r\n r(25:32)=3; %4;   %Down\r\n r(33:40)=4; %6;   %Back\r\n r(41:48)=5; %7; %Right\r\nrbase=r;\r\n\r\nsum_dt=0;\r\nfor cases=1:10 \r\n r=rbase;\r\n mix=10;\r\n rmov=randi(18,[mix,1]);\r\n  for i=1:length(rmov) \r\n   if i\u003e1 % Eliminate move undos\r\n   % f2 f2 or f f'  or f' f\r\n    if (rmov(i)\u003e12 \u0026\u0026 rmov(i-1)==rmov(i))||(rmov(i-1)\u003c7 \u0026\u0026 rmov(i)==rmov(i- 1)+6)||...\r\n       (rmov(i-1)\u003e6  \u0026\u0026 rmov(i)==rmov(i-1)-6)    \r\n     rmov(i)=rmov(i)+1;   % 1:17 map to 2:18  18 map to 1\r\n     if rmov(i)==19,rmov(i)=1;end\r\n    end\r\n   end\r\n   r=r(vf(rmov(i),:));\r\n  end\r\n\r\n\r\nt0=clock;\r\nsolv_vec=Rubik_Solve_10(r)\r\ndt=etime(clock,t0)\r\nsum_dt=sum_dt+dt;\r\n\r\nPass1=Pass1 \u0026\u0026 length(solv_vec\u003c11);\r\n\r\nrt=r;\r\nfor i=1:length(solv_vec)\r\n   rt=rt(vf(solv_vec(i),:));\r\n end\r\n if all(rt(1:8)==rt(1)) \u0026\u0026 all(rt(9:16)==rt(9))  \u0026\u0026 all(rt(17:24)==rt(17)) \u0026\u0026 ...\r\n     all(rt(25:32)==rt(25))  \u0026\u0026 all(rt(33:40)==rt(33)) \u0026\u0026 all(rt(41:48)==rt(41))\r\n   fprintf('Cube Solved\\n')\r\n  Pass1=Pass1; % No change to Pass1 status\r\n else\r\n  fprintf('Cube Solve Failure\\n')\r\n  Pass1=0;\r\n end\r\n\r\nend\r\n\r\n\r\n\r\nassert(isequal(Pass1,1))\r\n\r\nif Pass1\r\n feval(@assignin,'caller','score',floor(sum_dt))\r\nend\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":2,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2012-08-19T03:27:10.000Z","updated_at":"2012-08-26T03:40:30.000Z","published_at":"2012-08-19T07:18:19.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.gif\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image1.png\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId3\",\"target\":\"/media/image2.gif\"}],\"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\u003eA set of cubes will be scrambled with 10 Face moves. The Challenge is to Solve all Cubes in 10 Moves or Less. Score will be by cumulative time of cubes 2 thru 11. The first cube may be used to load arrays but is still required to solve the cube. Ten moves relates to worst case 18^10 configs - 3.6e12. In actuality there are only 2.4e11 cubes at 10 turns. Brute force might not work.\u003c/w:t\u003e\u003c/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: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=\\\"rId2\\\"/\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: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=\\\"rId3\\\"/\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\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Cube vector (1x48](see Figure) with values 0:5, eight of each\u003c/w:t\u003e\u003c/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 Rotation Vector of 10 or less values. Values range from 1:18\u003c/w:t\u003e\u003c/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\u003eValues 1:18 represent the standard cube moves:ufdlbru'f'd'l'b'r'u2f2d2l2b2r2\u003c/w:t\u003e\u003c/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\u003cw:r\u003e\u003cw:t\u003e Move of FL[2 4] requires L'F' solv_vec=[10 8] at a minimum to solve\u003c/w:t\u003e\u003c/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\u003eCube=[00303003 44410110 11022222 22253533 53344444 11155555] as integer array\u003c/w:t\u003e\u003c/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\u003esolv_vec=[10 8]\u003c/w:t\u003e\u003c/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\u003eActual solutions will be 8 to 10 values.\u003c/w:t\u003e\u003c/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 Cube sites claim a capability of solving 10 moves in only 40 hrs. Not sure if they have Matlab, which can achieve 10 moves in \u0026lt;0.15 sec. Matlab with a 16GB/i5 can solve 12 moves in \u0026lt; 1.8 seconds. Unfortunately, Cody appears to have a memory/processing speed issue which makes the 11 and 12 move Challenges impossible.\u003c/w:t\u003e\u003c/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=\\\"http://kociemba.org/cube.htm\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eCube Org\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e and\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"http://www.speedcubing.com/CubeSolver/CubeSolver.html\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eSpeed Cubing\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\u003eThe next Cube Challenge will be to solve a fully randomized cube in as few moves as possible. With this next challenge I'll post my 3D-Cube Viewer Tool used for algorithm development.\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.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,R0lGODlhhACBAPcAAFIBBYKCggAAjsfHvZZOTubm2KOioo4AAD09lgAAyqccHJ+xsfPz5cYAACMjldfXygEBrJKSkuLx8QQEU6yuu4UUFLmxsa2tpxAQnOQAAN/f0c3NxGVlaOnp6aoAAZqamv7+8gAAnAAA7AAAvImJibSlpbW4uJaWoCkpQ1EdHe7u4La2qsEKCqeTkwAAcrm5s9HZ2YGBlMLCwktLc+Li4qWlqpsAAFpaigAA3Zs1NPn569IAAMjQ0A8PtJCQnPLy8qqqqvMAAMrKynJycrMJCfr6+gwMpauwsMm6utTf32kAAJ2Dgw8PjKampp0lJenw7zc3igAAspWVla0MDO/v8LsAAAAAowAA/w8Puw4Oe7q6urzFxXBbYNnk5NXV1a6ursbNzfT//7a2tYeHhwAAlJQAAEhIiQAA1ZwgIM0AACkpjOn29gICZBkZleoAAJptbe7u7rUAAJ2dnQAA8wAAw46Ojriko3gfHwAAfdnZ2aQAAm1tkAAA49wAANHR0fX19f8AAHd5eXdjY30EBLgMDAcHtAYGpr6+vrKyst7e3qukpPDw6Z6Xl8bGxubm5rOurs7Ozf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAQAAAAALAAAAACEAIEAAAj/ACMJHEiwoMGDCBMqXMiwocOHECNKnEixosWLGDNq3Mixo8ePIEOKHEmypMmTKFOqXMmypcuXMGOOhCMmkcybGjt8IXGoSSOcQCf+QERCjMA/TWQEXdpQCwlEBpsYZUq1oBASQH4gFNOkalU/deTAWdhIzh+vQBNF+EDDISSxaGM6kiLFS0QYETrEbYm0jhCKc/PsTflHDAcgF+F8gDTY5KGiieQItvhHzt/GIYXUaaI10g/LGOV0xdzRSwQ5jgr+MaC04qE6daCSzkjjQwSbCKVO1Mw5Us+zsyl2kFPHD0OuEL1IQU2w0QfgwR/+aELickMZBqAnrH37YB4peqM3/yR6SKIQuAiHF1dYG7d4hDJid5YIA7zB6dUbOvpg973VOhy4B9gHkwkUX3kP/fHBT/5FksdpjiTyQWoWDScYb2NJBIQW7znShBQFBobREEMY0FZFiMhGWgdNjNEaQYoxRpFyH6pYkRgGYPbDF2MweFBlPj5EgxwRTIaddhNBkt1eYhTVkG4OsViHjAOdN99EeQRSR3hUPfbFlQshxxAQJLxYUB5mTcQdDXlMyJQXBuQlUYpIEhRfjgr5IQeXDcGhRQAIRkKDFCfeNJwchUpUFpiRyPBUhgsNmWhCO5ZpkGJBwmSAIBh9xyUkm/HJ0Fz9JSTGGFP9CISZL9lRxRsY1f9GAw1hTeoQkAh5yWhUqb5UQhA7vLHGRUJwMIRxFsmRqRdy2OfQF722VIIbgGRAQBfCfdiIAVTeONWDiCqapkvTAgKIGzkkEdFQlgpUQ7QTySDFh6VK9BakK5VrLiBOINvUUwYhglhF0wUSSKdysqTvvk6wepAfH9SxayRffCGUDAFY7IcB+KrpZr7U7msuIYokBNaeZD0HkaNizOfFxxUVMAQVIIu8bxUtGKQWWw69LCpCV/VWUAdFUgTCCwhk8XNJC9vcgLACzVVXRBLaSpBaKCP0wwfWPTSAGRBcgcUiNdu8bx8EJPGFX4CBeNBw3S20msMJPXCDIVfk3QPZKjX/bTYgKSxwkYJBOiJHfg9BqZAGe2AgQt56852S32aXkQO2lAFR3nRsS4RjQirE0AYfkEO+d9l/m6tHEE6AgREQAdQRaLxLEsSAD2qcUXrpp/edQer76mGuArNLdIgUAYxm0XkZgtAEFAnsvnvvKSlyAPDm2rDvFI/sttlY59UZEZodvGDGCNJLTz1KJTRQRsh/C79vHIwktxaFAt170QooRJF++us7SQkykIEy7CB18ttXGpbQEO4IaCB4eeBDHrAHQ+DhfwCUHPuo5QY9HNBsCdxXsIaVHuL4620RyBRDCtA40pHhcRjknQYFCD8bNACEf0ObBO5Dpq4ppAnFA53o/3AAuRfGUIaoA0Qc4mCzEIosA5cjCFE4BJFVLUQHJ8jd7gQAwyNeIYAm8ZseQuhEm+WAB416ysQWAi2EgAAI0EsfF72Yt7El0VxVSGAZbaaAQHyhYxERE0HMh77/zdGLfMjCDMMIP5GlQXuA2OMTAYAEjMigCcAZwA38F8NDYlAEViADExbJtEaKrA8HSIMHsAeIPpSBBTm7CCQusIEKdhGDnkwfBPAQPTv2zZQic8MBroc9VAKiAQy0iAo4wAbS0TGXpYuCADj5RVKShHLBVMIHU+dKc6UBVhNRgQ/aMAIy0DFv0LwCHfBAzcjdsXJluCE3iQmIHRCAhA4BQQ3UEP89PgjgnFfIZQLIYIVbuvOXrBSeHqrAzTI88VoO+Vohr4ADc57zkDgIQQiImMF8/Q578vPAKs1mzGDmAAYKAcEhbhC20uHgnxe9Ah/IQAbdYRCMJbHeRxEYvDJ202xocN1BNsBSg1IUpnTEQwgEEL0j4vSaOyhDH4AHSXM1oKrmKqnZFGCjSFDQCEbN20vPGYUJTNSp1hzJr4IgVZ6KbAdY/enfiGCxSOhgDKOLYUW9uE5pAvSpav2dG2ywTZGVsQF6+KhW/zYFO1AAAWf931gxmACNujCsHUWouZaIQ7O5oa1yTZ0N2qlXpO5uoFZwZkAxq760iqRpIm0iVdMgzIT/NtWLk3WpZbfI2um5NiR+y6NhQTpG255zr5CbaU3l2NvS+XJywHzkvrD6tzIowbh0zG0o6YDL5ubtDIp8ZyvfF0lWugEATASeHm57xL1CQACRlV46d5fREGDgtyAZYOoK2ICRAq+AcFUve2PIBzaQgbSGZK0IaKo7wL4WmCI7wCBYaUzpxm/AknUBGwA63yvs8rYOBi6ERabNYhITscBc7xHPAIEQRMGizzQqHTTqW/EadqHAk2sBp2pYDENuwWQgoj85fMsRTNOoIc7viIOnxPSSlJ7nskEaevw/KzAVcrn14iETIICC/i/JHykBj9Wruj2GNnvyjCSGrRxZ5NKR/wxzOMNub4rfjzyBAIU1W1Wv+uS/cVbNpXtvfI8KUDzQlKMxBDNI3pDn4YrQBo08875i64GmjoCdGHRzDEUQggn4OLMsWUKaZXtKG+x0sTZbYhwSgNr2mvZ/76XDqxNdZ5EswcmOfuIBFOtQ4O0AAGxILW5nXboRuKCQHW4tTEowBT3/LQN6uCGq9dzSYf+PDmSAQBeNSEdFj2QLCiB1/BpQQOziFsaQ47KXS5fsGscEDDnI9d88UIZeC/i4ppVzCFTLbu/mrRC1LkkXcpCBIARBksG7Lkg/LT3kKtemzKUjHaAgvpZIAM/lxZ4blODfCx/3hVZmODqbmwA1nEAHQf9ZwxuEW0ypUpfK2TUwd7XMWhy0wQcqqAojJtzyepIXhCKHnLFdQOT08QEDMShAXFrA0BwTc8dAP2Jfz4DuI0JTBIbYwwMaAwQiOH1fg50yzNNHdS9n2eq3jMINBjAbMYQ7h/bOnthV52PlIlrTaM/bCMwAr8aAwQk5hPJmnazi0vFhqQM+ewzhnAAoNAEE/klCDkwpaUDEFtB5AyUZfIz3GLrA5ChvUCS6QICdtlLwNxNepecwB2kOWqzEbngbYpBz0Q9kDQQYc+WtOkY6yBrB9I19cjGwB6Xb3iBvkOe0J+mCapc2hoa4wdaPj5AWSDvuf7PBzM/9vyiYge3UV4jRAQiRAdQ3MehYnvXexQD58C8EERXAPggh3l50l9wA7Xc/Q7ZwB3O7+rsO4AMMoH8QAQPxdm90NFN8MHvGR4AQQXojVni4NQF7oAEOSBF31miYd0QQIH0XeBFvMHfBE3TeB34feBGidn6UBQUrkH8neBEt4HUjSHY3N4AvuBGI0Gx0tztn4ABJd4MeAW47mDdH94NA+BHwZnm6IwJGoHVHKBIDdwBRoHYm+IQh8QNcMANBZIVc2IVe+IVgGIZiOIZkWIZmeIZomIZquIZs2IYJERAAOw==\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,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\"},{\"partUri\":\"/media/image2.gif\",\"contentType\":\"image/gif\",\"content\":\"data:image/gif;base64,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\"}]}"},{"id":714,"title":"Chezz_000 : Simplified chess","description":"Chezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\r\n\r\nSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\r\n\r\nChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\r\n\r\n\r\n*Inputs:* (b,pmv,castle)\r\n\r\nPlayer always appears to be White. However, Black may apparently move first.\r\n\r\nb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\r\n\r\npmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\r\n\r\ncastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\r\n\r\n\r\n\r\n*Output:* mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\r\n\r\n\r\n\r\nThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\r\n\r\n*Passing:* Player must Win both games\r\n\r\n*Evolution:* Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\r\n\r\n\r\nChezz_000: Makes no moves or captures - The weakest player possible\r\n\r\nLinks updated 12/27/12\r\n\r\n","description_html":"\u003cp\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/p\u003e\u003cp\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \"a4\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 0.\u003c/p\u003e\u003cp\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/p\u003e\u003cp\u003e\u003cb\u003eInputs:\u003c/b\u003e (b,pmv,castle)\u003c/p\u003e\u003cp\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/p\u003e\u003cp\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/p\u003e\u003cp\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/p\u003e\u003cp\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 0]\u003c/p\u003e\u003cp\u003e\u003cb\u003eOutput:\u003c/b\u003e mv  [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/p\u003e\u003cp\u003eThe Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/p\u003e\u003cp\u003e\u003cb\u003ePassing:\u003c/b\u003e Player must Win both games\u003c/p\u003e\u003cp\u003e\u003cb\u003eEvolution:\u003c/b\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/p\u003e\u003cp\u003eChezz_000: Makes no moves or captures - The weakest player possible\u003c/p\u003e\u003cp\u003eLinks updated 12/27/12\u003c/p\u003e","function_template":"function mv=player_move(b,pmv,castle)\r\n% Author: Richard Z\r\n% Bot name: Do Nothing\r\n% Chezz_000\r\n%Chezz_000 bot is no legal moves mv=[0 0 0]\r\n%\r\n% 0-wht 1-Blk; board 8x8, opponents last move, \r\n% castle vector(8 40 64 1 33 57) 0=has moved, 1=eligible\r\n% example: mv =[39 37 0] is e4\r\n% pmv (move,from to promo) is used for en passant\r\n% [0 0 0] is invalid move or first move of game\r\n% castle vector is used to castle yourself or see if opponent may castle\r\n \r\n% This is the computer's algorithm - Going for a draw\r\n mv=zeros(1,3); % [from to promo] \r\nend % End of Computer Champion Bot","test_suite":"%%\r\n% Load in the routines that play the game and check move validity\r\ntic\r\nurlwrite('http://rmatlabtest.appspot.com/Chezz_Shell.m','Chezz_Shell.m') ;\r\nurlwrite('http://rmatlabtest.appspot.com/ghost_white.m','ghost_white.m') \r\nurlwrite('http://rmatlabtest.appspot.com/computer_move000.m','computer_move.m') \r\nurlwrite('http://rmatlabtest.appspot.com/mov_chk.m','mov_chk.m') \r\nrehash path\r\ntoc\r\n%%\r\n% Play Two Chezz games\r\n% Player must win Twice to Pass\r\nglobal pmvout1 pmvout2\r\ntic\r\n wins=0; % player wins\r\n b=zeros(8);% P 1/7 R 2/8 N 3/9 B 4/10 Q 5/11 K 6/12 \r\n b(2,:)=7;\r\n b(1,:)=[8 9 10 11 12 10 9 8]; % Player 7:12\r\n b(7,:)=1;\r\n b(8,:)=b(1,:)-6; % Computer 1:6\r\n b_orig=b;\r\n \r\n %mv=zeros(1,3); % [from to promo)]  \r\n %computer_wht=0; % 0 Computer plays wht\r\n %computer_wht=1; % 1 Computer plays black\r\n \r\n pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n castle=[1 1 1 1 1 1];\r\n % False move call to satisfy Cody Rqmt of TestSuite match Ref Solution\r\n mv=player_move(b,pmv,castle)\r\n  \r\n for computer_wht=0:1\r\n  pmvout1=pmv; % Store game 1 moves\r\n  \r\n  dbg=0;\r\n  game_over=false;\r\n  b=b_orig;\r\n  no_capture=0;\r\n  b_hist=zeros(102,8,8);\r\n  pmv=zeros(1,3); % [from to promo)] Opponents last move\r\n  castle=[1 1 1 1 1 1]; % History of if ever moved w/b Castles/kings\r\n %  idx 8 40 64  1 33 57\r\n \r\n while ~game_over\r\n  mvP=zeros(1,3); % [from to type/promote)] \r\n  % Shell 0=Blk,1=Wht;Board;move,prev move;\r\n  % function (1 Play Comp, 2 Player, 3 Check mv)\r\n  \r\n  % White move\r\n  if computer_wht==0\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,1); % 0 Wht,... 1 Computer\r\n  else\r\n   [mvP]=Chezz_Shell(0,b,mvP,pmv,castle,2); % 0 Wht  2 is player\r\n  end\r\n  \r\n  \r\n  [mv]=Chezz_Shell(0,b,mvP,pmv(end,:),castle,3); % 0 Wht,..., 3 Check\r\n  pmv=[pmv;mv(1:3)];\r\n  capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n     b(mv(2))=b(mv(1)); % potential promotion\r\n     b(mv(1))=0;\r\n     if ismember(b(mv(2)),[1 7])\r\n      if ismember(mv(2),[1:8:57 8:8:64])\r\n       b(mv(2))=mv(3); % Place promoted selection\r\n      end\r\n     end\r\n     \r\n   else % ep or castle by White\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=6;\r\n      if mv(2)==24\r\n        b(8)=0;b(32)=2;  \r\n      else\r\n        b(64)=0;b(48)=2;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=1; % White Pawn\r\n      b(mv(2)+1)=0; % Take pawn that passed\r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n  %b % display board after move\r\n  \r\n  if isempty(find(b==12,1))\r\n   % Game over : Black King Captured\r\n   game_over=true; % change to if comp=wht or blk for win\r\n   if computer_wht==1 % Blk Computer King; Player is Wht captured Blk King \r\n    wins=wins+1;\r\n   end\r\n   continue;\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end\r\n   \r\n  % Black Move\r\n  mvP=zeros(1,4); % [from to type/promote specials(castle=1/ep=2)] \r\n if computer_wht==0\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,2); % 2 Blk,... 2 is player\r\n  else\r\n   [mvP]=Chezz_Shell(1,b,mvP,pmv,castle,1); % 2 Blk  1 is Computer\r\n end\r\n  \r\n  [mv]=Chezz_Shell(1,b,mvP,pmv(end,:),castle,3); % 2 Blk,..., 3 Check\r\n  \r\n pmv=[pmv;mv(1:3)];\r\n capture=false;\r\n  % Board changes only occur in Suite code\r\n  if mv(1)~=0 % Valid move determined by mv_chk\r\n   if mv(4)==0 % Normal moves and promotions\r\n    if b(mv(2))~=0,capture=true;end\r\n    b(mv(2))=b(mv(1)); % potential promotion\r\n    b(mv(1))=0;\r\n    if ismember(b(mv(2)),[1 7])\r\n     if ismember(mv(2),[1:8:57 8:8:64])\r\n      b(mv(2))=mv(3); % Place promoted selection\r\n     end\r\n    end\r\n   else % ep or castle by Black\r\n    if mv(4)==1 % castle 0-0 or 0-0-0\r\n      b(mv(1))=0;\r\n      b(mv(2))=12;\r\n      if mv(2)==49 % Blk 0-0\r\n        b(57)=0;b(41)=8;  \r\n      else % Blk 0-0-0\r\n        b(1)=0;b(25)=8;\r\n      end    \r\n    end % castle\r\n    if mv(4)==2 % ep by Black\r\n      capture=true;\r\n      b(mv(1))=0;\r\n      b(mv(2))=mv(3);\r\n    % White passed black on prior move\r\n      b(mv(2)-1)=0; \r\n    end % end ep\r\n   end % move implemented\r\n  end % end move\r\n  \r\n%   b\r\n%   figure(1);imagesc(b,[0 12]);axis equal;\r\n  \r\n  if isempty(find(b==6,1))\r\n   % Game over : Blk captured White King\r\n   game_over=true;\r\n   if computer_wht==0 % Wht Computer King; Player is Blk captured Wht King\r\n    wins=wins+1;\r\n   end\r\n   continue\r\n  end\r\n  \r\n  castle=castle.*logical([b(8)==2 b(40) b(64)==2 b(1)==8 b(33) b(57)==8]);\r\n  \r\n  if ~capture\r\n   no_capture=no_capture+1;\r\n   if no_capture\u003e100\r\n       fprintf('Draw 100 moves no capture\\n');\r\n       game_over=true;\r\n   end % move is b and w\r\n   b_hist(no_capture,:,:)=b;\r\n   % Check for 3 position repetition\r\n   for i=1:no_capture-1\r\n    cdelta=0;\r\n    for j=i+1:no_capture\r\n     delta=(b_hist(i,:,:)-b_hist(j,:,:));\r\n     if sum(abs(delta(:)))==0\r\n      cdelta=cdelta+1;\r\n     end\r\n    end\r\n    if cdelta\u003e=7 % repetitions 3 identical setups\r\n     fprintf('Game over due to repetition\\n');\r\n     game_over=true;\r\n    end\r\n   end % rep check loop \r\n  else\r\n   no_capture=1;\r\n   b_hist=b_hist*0;\r\n   b_hist(no_capture,:,:)=b;\r\n  end % ~capture\r\n  \r\n end % While ~game_over\r\n \r\n end % wht_blk\r\n\r\npmvout2=pmv;\r\nwins\r\n \r\n% Player must win Twice to Pass\r\ntoc\r\nassert(isequal(wins,2))\r\n\r\n%%\r\nglobal pmvout1 pmvout2\r\n% Output moves for games\r\n\r\n% Output game 2 moves\r\npmv=pmvout1;\r\n   for i=2:3:size(pmv,1)-3\r\n    fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n   end\r\n   fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n   fprintf('%2i %2i %2i\\n',pmv(end,:));\r\n \r\n% Output game 2 moves\r\npmv=pmvout2;\r\n for i=2:3:size(pmv,1)-3\r\n  fprintf('%2i %2i %2i %2i %2i %2i %2i %2i %2i \\n',pmv(i,1:3),pmv(i+1,1:3),pmv(i+2,1:3));\r\n  end\r\n% repeat of moves\r\n fprintf('%2i %2i %2i\\n',pmv(end-2,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end-1,:));\r\n fprintf('%2i %2i %2i\\n',pmv(end,:));","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":5,"test_suite_updated_at":"2012-12-27T22:34:39.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2012-05-24T02:22:59.000Z","updated_at":"2025-02-01T14:24:16.000Z","published_at":"2012-05-24T04:50:47.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChezz:...A simplified Chess game. Two game match with future multiple skill levels via evolutionary upgrades.\u003c/w:t\u003e\u003c/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\u003eSimplified the rules to implement rapid move check. Normal Chess moves like \\\"a4\\\", Castling, and En Passant are accepted. Moves are simple vectors [idx_from idx_to promo] where promo is for pawns reaching the 8th rank. Piece names are numeric 1-6 White (P,R,N,B,Q,K) and Black is 7-12. Board empty space is 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\u003eChezz unique rules: 1) To Win must remove opponent's King.. 2) Lose Turn if try an impossible move.. 3) Checks are ignored - allow move into check, castle out of check, castle thru/into check.. 4) Pawn promote to any piece, including opponent and vacuum.. 5) Six position repetition is a Draw..6) 50 moves No captures is a Draw..\u003c/w:t\u003e\u003c/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 (b,pmv,castle)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ePlayer always appears to be White. However, Black may apparently move first.\u003c/w:t\u003e\u003c/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\u003eb (8x8) array with empty=0, White Pieces 1-6, Blk Pieces 7-12\u003c/w:t\u003e\u003c/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\u003epmv [from to promo] vector of both players moves (needed for en passant option). Illegal move creates a [0 0 0] pmv value. Size [2*moves,3]\u003c/w:t\u003e\u003c/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\u003ecastle: 6 pt logical vector to show castling options. 1 if piece is eligible. Positions are [8 40 64 1 33 57] for [WQR WK WKR BQR BK BKR]. . . eg castle mv [40 56 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: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 mv [from to pawn_new_type] where from/to are 1-64 and pawn_new is 0 thru 12 if pawn is on final row.\u003c/w:t\u003e\u003c/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 Test Suite will oversee two games with the Player as Black(moving second) and then as White.\u003c/w:t\u003e\u003c/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\u003ePassing:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Player must Win both games\u003c/w:t\u003e\u003c/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\u003eEvolution:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e Winning player algorithms will be hosted as Chezz_xyz based on their wins over other Chezz algorithms. Champions and the basis will be fully credited in Chezz updates. Champions must be able to play self and Not Cody timeout.\u003c/w:t\u003e\u003c/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\u003eChezz_000: Makes no moves or captures - The weakest player possible\u003c/w:t\u003e\u003c/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\u003eLinks updated 12/27/12\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"}],"term":"tag:\"game theory\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"game theory\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"game theory\"","","\"","game theory","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f10222723b8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f1022272318\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f1022271a58\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f1022272638\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f1022272598\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f10222724f8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f1022272458\u003e":"tag:\"game theory\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f1022272458\u003e":"tag:\"game theory\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"game theory\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"game theory\"","","\"","game theory","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007f10222723b8\u003e":null,"#\u003cMathWorks::Search::Field:0x00007f1022272318\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007f1022271a58\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007f1022272638\u003e":1,"#\u003cMathWorks::Search::Field:0x00007f1022272598\u003e":50,"#\u003cMathWorks::Search::Field:0x00007f10222724f8\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007f1022272458\u003e":"tag:\"game theory\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007f1022272458\u003e":"tag:\"game theory\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":44970,"difficulty_rating":"easy"},{"id":2935,"difficulty_rating":"easy"},{"id":701,"difficulty_rating":"easy-medium"},{"id":52323,"difficulty_rating":"medium"},{"id":772,"difficulty_rating":"medium"},{"id":773,"difficulty_rating":"medium"},{"id":44728,"difficulty_rating":"medium"},{"id":879,"difficulty_rating":"medium"},{"id":61067,"difficulty_rating":"medium"},{"id":44630,"difficulty_rating":"medium"},{"id":44647,"difficulty_rating":"medium-hard"},{"id":931,"difficulty_rating":"hard"},{"id":702,"difficulty_rating":"hard"},{"id":715,"difficulty_rating":"unrated"},{"id":726,"difficulty_rating":"unrated"},{"id":727,"difficulty_rating":"unrated"},{"id":916,"difficulty_rating":"unrated"},{"id":714,"difficulty_rating":"unrated"}]}}