{"group":{"group":{"id":53,"name":"Board Games II","lockable":false,"created_at":"2018-08-27T18:19:42.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Utilize Matlab to win all the board games.","is_default":false,"created_by":26769,"badge_id":62,"featured":false,"trending":false,"solution_count_in_trending_period":12,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":475,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eUtilize Matlab to win all the board games.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\",\"relationship\":null}],\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"target\":\"/matlab/document.xml\",\"relationshipId\":\"rId1\"}]}","description_html":"\u003cdiv style = \"text-align: start; line-height: normal; min-height: 0px; white-space: normal; color: rgb(0, 0, 0); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none solid rgb(0, 0, 0); white-space: normal; \"\u003e\u003cdiv style=\"display: block; min-width: 0px; padding-top: 0px; perspective-origin: 289.5px 10.5px; transform-origin: 289.5px 10.5px; \"\u003e\u003cdiv style=\"font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-bottom: 9px; margin-left: 4px; margin-right: 10px; margin-top: 2px; text-align: left; white-space: pre-wrap; perspective-origin: 266.5px 10.5px; transform-origin: 266.5px 10.5px; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; margin-right: 10px; \"\u003e\u003cspan style=\"display: inline; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; \"\u003e\u003cspan style=\"\"\u003eUtilize Matlab to win all the board games.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","published_at":"2019-08-13T14:23:58.000Z"},"current_player":null},"problems":[{"id":2538,"title":"Find the Next Legal Move in Reversi","description":"\u003chttp://en.wikipedia.org/wiki/Reversi Reversi\u003e, also known as Othello, is a game in which reversible white/black chips are placed on a grid. The goal is to have the most pieces once the board is full (i.e. there are no more legal moves). A move, to be legal, must flip at least one opponent's chip by flanking it. \"Flanking\" occurs by surrounding a line of opposing chips with two of your own. It can occur on straight lines and diagonals.\r\n\r\nIf we represent a small 4x4 board this way, with 0 for empty squares, 1 for black chips, and 2 for white chips, \r\n\r\n [ 0 0 0 0\r\n   0 1 2 0\r\n   0 2 1 0 \r\n   0 0 0 0 ]\r\n\r\nthen black has 4 legal moves shown by b.\r\n\r\n [ 0 0 b 0\r\n   0 1 2 b\r\n   b 2 1 0 \r\n   0 b 0 0 ]\r\n\r\nAny of these moves will flank (surround) a white chip and cause it to be flipped. \r\n\r\nYour Cody challenge is to take the given board (always square) and side (1 or 2) and locate all the legal moves. Return all legal moves as a vector of column-wise indices into the matrix. If there are no legal moves, return empty.\r\n\r\nExample.\r\n\r\nFor the board shown above,\r\n\r\n side = 1 (black)\r\n moves = [3 8 9 14]\r\n\r\nNote: See also \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2565-determine-the-result-of-a-move-in-reversi Problem 2565\u003e, Determine the Result of a Move in Reversi.\r\n","description_html":"\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Reversi\"\u003eReversi\u003c/a\u003e, also known as Othello, is a game in which reversible white/black chips are placed on a grid. The goal is to have the most pieces once the board is full (i.e. there are no more legal moves). A move, to be legal, must flip at least one opponent's chip by flanking it. \"Flanking\" occurs by surrounding a line of opposing chips with two of your own. It can occur on straight lines and diagonals.\u003c/p\u003e\u003cp\u003eIf we represent a small 4x4 board this way, with 0 for empty squares, 1 for black chips, and 2 for white chips,\u003c/p\u003e\u003cpre\u003e [ 0 0 0 0\r\n   0 1 2 0\r\n   0 2 1 0 \r\n   0 0 0 0 ]\u003c/pre\u003e\u003cp\u003ethen black has 4 legal moves shown by b.\u003c/p\u003e\u003cpre\u003e [ 0 0 b 0\r\n   0 1 2 b\r\n   b 2 1 0 \r\n   0 b 0 0 ]\u003c/pre\u003e\u003cp\u003eAny of these moves will flank (surround) a white chip and cause it to be flipped.\u003c/p\u003e\u003cp\u003eYour Cody challenge is to take the given board (always square) and side (1 or 2) and locate all the legal moves. Return all legal moves as a vector of column-wise indices into the matrix. If there are no legal moves, return empty.\u003c/p\u003e\u003cp\u003eExample.\u003c/p\u003e\u003cp\u003eFor the board shown above,\u003c/p\u003e\u003cpre\u003e side = 1 (black)\r\n moves = [3 8 9 14]\u003c/pre\u003e\u003cp\u003eNote: See also \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2565-determine-the-result-of-a-move-in-reversi\"\u003eProblem 2565\u003c/a\u003e, Determine the Result of a Move in Reversi.\u003c/p\u003e","function_template":"function moves = reversi_moves(board,side)\r\n  moves = [];\r\nend","test_suite":"%%\r\nboard = [ 0 0 0 0\r\n          0 1 2 0\r\n          0 2 1 0 \r\n          0 0 0 0 ];\r\nside = 1;\r\nmoves = [3 8 9 14];\r\nassert(isequal(reversi_moves(board,side),moves))\r\n\r\n%%\r\nboard = [ 1 2 \r\n          2 1 ];\r\nside = 1;\r\nmoves = [];\r\nassert(isequal(reversi_moves(board,side),moves))\r\n\r\n%%\r\nboard = [ 0 0 0 0\r\n          0 1 1 1\r\n          0 2 1 0 \r\n          0 0 0 0 ];\r\nside = 2;\r\nmoves = [5 13 15];\r\nassert(isequal(reversi_moves(board,side),moves))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":7,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":23,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-08-28T15:44:28.000Z","updated_at":"2025-12-12T13:46:37.000Z","published_at":"2014-08-28T15:52:04.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:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Reversi\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eReversi\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, also known as Othello, is a game in which reversible white/black chips are placed on a grid. The goal is to have the most pieces once the board is full (i.e. there are no more legal moves). A move, to be legal, must flip at least one opponent's chip by flanking it. \\\"Flanking\\\" occurs by surrounding a line of opposing chips with two of your own. It can occur on straight lines and diagonals.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf we represent a small 4x4 board this way, with 0 for empty squares, 1 for black chips, and 2 for white chips,\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 0 0 0\\n   0 1 2 0\\n   0 2 1 0 \\n   0 0 0 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen black has 4 legal moves shown by b.\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 0 b 0\\n   0 1 2 b\\n   b 2 1 0 \\n   0 b 0 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eAny of these moves will flank (surround) a white chip and cause it to be flipped.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 Cody challenge is to take the given board (always square) and side (1 or 2) and locate all the legal moves. Return all legal moves as a vector of column-wise indices into the matrix. If there are no legal moves, return empty.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 the board shown above,\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[ side = 1 (black)\\n moves = [3 8 9 14]]]\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\u003eNote: See also\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/2565-determine-the-result-of-a-move-in-reversi\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2565\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, Determine the Result of a Move in Reversi.\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":2565,"title":"Determine the Result of a Move in Reversi","description":"Note: This is closely related to \u003chttp://www.mathworks.com/matlabcentral/cody/problems/2538-find-the-next-legal-move-in-reversi Problem 2538\u003e, Find the Next Legal Move in Reversi.\r\n\r\n\u003chttp://en.wikipedia.org/wiki/Reversi Reversi\u003e, also known as Othello, is a game in which reversible white/black chips are placed on a grid. The goal is to have the most pieces once the board is full (i.e. there are no more legal moves). A move, to be legal, must flip at least one opponent's chip by flanking it. \"Flanking\" occurs by surrounding a line of opposing chips with two of your own. It can occur on straight lines and diagonals.\r\n\r\nWe represent a small 4x4 board this way, with 0 for empty squares, 1 for black chips, and 2 for white chips, \r\n\r\n [ 0 0 0 0\r\n   0 1 2 0\r\n   0 2 1 0 \r\n   0 0 0 0 ]\r\n\r\nNow assume black now moves where the asterisk (*) is placed. This is column-wise matrix index position 14.\r\n\r\n [ 0 0 0 0\r\n   0 1 2 *\r\n   0 2 1 0 \r\n   0 0 0 0 ]\r\n\r\nYour Cody challenge is to determine the state of the board once the appropriate chips have been flipped over. In this case the correct answer would be\r\n\r\n [ 0 0 0 0\r\n   0 1 1 1\r\n   0 2 1 0 \r\n   0 0 0 0 ]\r\n\r\nExample\r\n\r\nFor the inputs boardIn, side, and move\r\n\r\n boardIn = ...\r\n   [ 0 0 0 0 0\r\n     0 1 1 2 2 \r\n     0 2 1 1 0\r\n     0 0 2 1 0 \r\n     0 0 0 0 0 ]\r\n side = 1 (black)\r\n move = 9 (matrix index of black's next move)\r\n\r\nThe correct answer is\r\n\r\n boardOut = ...\r\n   [ 0 0 0 0 0\r\n     0 1 1 2 2 \r\n     0 1 1 1 0\r\n     0 1 1 1 0 \r\n     0 0 0 0 0 ]\r\n\r\n\r\n","description_html":"\u003cp\u003eNote: This is closely related to \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/2538-find-the-next-legal-move-in-reversi\"\u003eProblem 2538\u003c/a\u003e, Find the Next Legal Move in Reversi.\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Reversi\"\u003eReversi\u003c/a\u003e, also known as Othello, is a game in which reversible white/black chips are placed on a grid. The goal is to have the most pieces once the board is full (i.e. there are no more legal moves). A move, to be legal, must flip at least one opponent's chip by flanking it. \"Flanking\" occurs by surrounding a line of opposing chips with two of your own. It can occur on straight lines and diagonals.\u003c/p\u003e\u003cp\u003eWe represent a small 4x4 board this way, with 0 for empty squares, 1 for black chips, and 2 for white chips,\u003c/p\u003e\u003cpre\u003e [ 0 0 0 0\r\n   0 1 2 0\r\n   0 2 1 0 \r\n   0 0 0 0 ]\u003c/pre\u003e\u003cp\u003eNow assume black now moves where the asterisk (*) is placed. This is column-wise matrix index position 14.\u003c/p\u003e\u003cpre\u003e [ 0 0 0 0\r\n   0 1 2 *\r\n   0 2 1 0 \r\n   0 0 0 0 ]\u003c/pre\u003e\u003cp\u003eYour Cody challenge is to determine the state of the board once the appropriate chips have been flipped over. In this case the correct answer would be\u003c/p\u003e\u003cpre\u003e [ 0 0 0 0\r\n   0 1 1 1\r\n   0 2 1 0 \r\n   0 0 0 0 ]\u003c/pre\u003e\u003cp\u003eExample\u003c/p\u003e\u003cp\u003eFor the inputs boardIn, side, and move\u003c/p\u003e\u003cpre\u003e boardIn = ...\r\n   [ 0 0 0 0 0\r\n     0 1 1 2 2 \r\n     0 2 1 1 0\r\n     0 0 2 1 0 \r\n     0 0 0 0 0 ]\r\n side = 1 (black)\r\n move = 9 (matrix index of black's next move)\u003c/pre\u003e\u003cp\u003eThe correct answer is\u003c/p\u003e\u003cpre\u003e boardOut = ...\r\n   [ 0 0 0 0 0\r\n     0 1 1 2 2 \r\n     0 1 1 1 0\r\n     0 1 1 1 0 \r\n     0 0 0 0 0 ]\u003c/pre\u003e","function_template":"function boardOut = boardResult(boardIn,side,move)\r\n  boardOut = boardIn;\r\nend","test_suite":"%%\r\nboardIn = ...\r\n [ 0 0 0 0\r\n   0 1 2 0\r\n   0 2 1 0 \r\n   0 0 0 0 ];\r\nside = 1;\r\nmove = 14;\r\nboardOut = ...\r\n [ 0 0 0 0\r\n   0 1 1 1\r\n   0 2 1 0 \r\n   0 0 0 0 ];\r\nassert(isequal(boardOut,boardResult(boardIn,side,move)))\r\n\r\n%%\r\nboardIn = ...\r\n [ 0 0 0 0\r\n   0 1 1 1\r\n   0 2 1 0 \r\n   0 0 0 0 ];\r\nside = 2;\r\nmove = 5;\r\nboardOut = ...\r\n [ 0 2 0 0\r\n   0 2 1 1\r\n   0 2 1 0 \r\n   0 0 0 0 ];\r\nassert(isequal(boardOut,boardResult(boardIn,side,move)))\r\n\r\n%%\r\nboardIn = ...\r\n [ 0 2 0 0\r\n   0 2 1 1\r\n   0 2 1 0 \r\n   0 0 0 0 ];\r\nside = 1;\r\nmove = 4;\r\nboardOut = ...\r\n [ 0 2 0 0\r\n   0 2 1 1\r\n   0 1 1 0 \r\n   1 0 0 0 ];\r\nassert(isequal(boardOut,boardResult(boardIn,side,move)))\r\n\r\n%%\r\nboardIn = ...\r\n [ 0 0 0 0 0\r\n   0 1 1 2 2 \r\n   0 2 1 1 0\r\n   0 0 2 1 0 \r\n   0 0 0 0 0 ];\r\nside = 1;\r\nmove = 9;\r\nboardOut = ...\r\n [ 0 0 0 0 0\r\n   0 1 1 2 2 \r\n   0 1 1 1 0\r\n   0 1 1 1 0 \r\n   0 0 0 0 0 ]\r\nassert(isequal(boardOut,boardResult(boardIn,side,move)))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":7,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2014-09-09T16:32:03.000Z","updated_at":"2025-12-12T13:50:54.000Z","published_at":"2014-09-09T16:36:06.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\u003eNote: This is closely related to\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/2538-find-the-next-legal-move-in-reversi\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eProblem 2538\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, Find the Next Legal Move in Reversi.\u003c/w:t\u003e\u003c/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://en.wikipedia.org/wiki/Reversi\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eReversi\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e, also known as Othello, is a game in which reversible white/black chips are placed on a grid. The goal is to have the most pieces once the board is full (i.e. there are no more legal moves). A move, to be legal, must flip at least one opponent's chip by flanking it. \\\"Flanking\\\" occurs by surrounding a line of opposing chips with two of your own. It can occur on straight lines and diagonals.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe represent a small 4x4 board this way, with 0 for empty squares, 1 for black chips, and 2 for white chips,\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 0 0 0\\n   0 1 2 0\\n   0 2 1 0 \\n   0 0 0 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNow assume black now moves where the asterisk \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:t\u003e) is placed. This is column-wise matrix index position 14.\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 0 0 0\\n   0 1 2 *\\n   0 2 1 0 \\n   0 0 0 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eYour Cody challenge is to determine the state of the board once the appropriate chips have been flipped over. In this case the correct answer 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 0 0 0\\n   0 1 1 1\\n   0 2 1 0 \\n   0 0 0 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor the inputs boardIn, side, and move\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[ boardIn = ...\\n   [ 0 0 0 0 0\\n     0 1 1 2 2 \\n     0 2 1 1 0\\n     0 0 2 1 0 \\n     0 0 0 0 0 ]\\n side = 1 (black)\\n move = 9 (matrix index of black's next move)]]\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\u003eThe correct answer is\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"code\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\u003c![CDATA[ boardOut = ...\\n   [ 0 0 0 0 0\\n     0 1 1 2 2 \\n     0 1 1 1 0\\n     0 1 1 1 0 \\n     0 0 0 0 0 ]]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":43562,"title":"Mastermind","description":"We are playing the boardgame mastermind \u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game)\u003e. The game master has created a 4-character code for you to guess, with characters ranging from \"1\" to \"6\" (e.g. code = [2 1 3 4]).\r\n\r\nThe first guess (this will be [1 1 2 2]) is already done and the game master has given you following feedback:\r\n\r\n# The number of correct characters in your guess, in this case 1 because character \"1\" at index 2 is correct.\r\n# The number of correct characters, but in a wrong place. In this case 1 because you guessed character \"2\", but it is in the wrong place.\r\n\r\nNow, your function has to do the next guesses. Each time your function is called, the input will contain the code and feedback of all your previous guesses, the output is a copy of the input with your new code added (refer to the example code).\r\n\r\nIt is shown you could solve the code in only 4 additional guesses (refer to the wiki page), you will however get 11 according to the rules of Mastermind.\r\n\r\nGood luck!","description_html":"\u003cp\u003eWe are playing the boardgame mastermind \u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003ehttps://en.wikipedia.org/wiki/Mastermind_(board_game)\u003c/a\u003e. The game master has created a 4-character code for you to guess, with characters ranging from \"1\" to \"6\" (e.g. code = [2 1 3 4]).\u003c/p\u003e\u003cp\u003eThe first guess (this will be [1 1 2 2]) is already done and the game master has given you following feedback:\u003c/p\u003e\u003col\u003e\u003cli\u003eThe number of correct characters in your guess, in this case 1 because character \"1\" at index 2 is correct.\u003c/li\u003e\u003cli\u003eThe number of correct characters, but in a wrong place. In this case 1 because you guessed character \"2\", but it is in the wrong place.\u003c/li\u003e\u003c/ol\u003e\u003cp\u003eNow, your function has to do the next guesses. Each time your function is called, the input will contain the code and feedback of all your previous guesses, the output is a copy of the input with your new code added (refer to the example code).\u003c/p\u003e\u003cp\u003eIt is shown you could solve the code in only 4 additional guesses (refer to the wiki page), you will however get 11 according to the rules of Mastermind.\u003c/p\u003e\u003cp\u003eGood luck!\u003c/p\u003e","function_template":"function output = mastermind(input)\r\n    %% unpack the input (as example, alter if you like)\r\n    i = length(input);            % number of attempts so far\r\n    previousCode = input(i).code; % the last code you tried (at index i-1 you will find the code before that, etc.)\r\n    rightNumWrongPlace = input(i).rightNumWrongPlace; % the number of right numbers in previous attemp, but which were at the wrong place\r\n    rightNumRightPlace = input(i).rightNumRightPlace; % the number of right numbers in previous attemp at the wright position\r\n    % The user data from previous run (optional):\r\n    % Please use \"if isfield(...\", because your first call the user data\r\n    % will be empty\r\n    if isfield(input(i).userdata,'var2')\r\n        var2 = input(i).userdata.var2;\r\n    end\r\n    \r\n    %% now, based on previous attempts create your next code\r\n    yourCode = [1 1 1 1];\r\n    \r\n    %% alter if you like\r\n    % you can use the field userdata to save variables needed in your next run (optional)\r\n    data.var1 = 1;\r\n    data.var2 = 'lala';\r\n    new.userdata = data; \r\n    \r\n    %% do not alter\r\n    output = input;\r\n    new.code = yourCode;            % your next try\r\n    new.rightNumWrongPlace = [];    % the gamemaster will fill in this field at evaluation for the next attempt\r\n    new.rightNumRightPlace = [];   % the gamemaster will fill in this field at evaluation for the next attempt\r\n    if ~isfield(new,'userdata') % ensure no errors when userdata is not used\r\n        new.userdata = [];\r\n    end\r\n    output(end+1) = new;\r\nend","test_suite":"%%\r\ncode = randi(6,1,4); % the real code to crack\r\n% attempt 1\r\nattempts = [];\r\nattempts(1).code = [1 1 2 2]; % the first attempt\r\n% eval\r\nattempts(1).rightNumRightPlace = sum(code==attempts(1).code);\r\nattempts(1).rightNumWrongPlace = sum(sum(repmat(code',1,4)==repmat(attempts(1).code,4,1),2)\u003e0)-attempts(1).rightNumRightPlace;\r\nattempts(1).userdata = [];\r\n% init\r\nsolved = false;\r\nwhile (length(attempts)\u003c11 \u0026\u0026 ~solved)\r\n    attempts = mastermind(attempts);\r\n    % eval\r\n    attempts(end).rightNumRightPlace = sum(code==attempts(end).code);\r\n    attempts(end).rightNumWrongPlace = sum(sum(repmat(code',1,4)==repmat(attempts(end).code,4,1),2)\u003e0)-attempts(end).rightNumRightPlace;\r\n    if attempts(end).rightNumRightPlace==4\r\n        solved = true;\r\n    end\r\nend\r\nassert(solved)","published":true,"deleted":false,"likes_count":3,"comments_count":2,"created_by":94929,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":15,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-10-16T09:19:14.000Z","updated_at":"2025-12-12T14:00:01.000Z","published_at":"2016-10-16T09:19:14.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\u003eWe are playing the boardgame mastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://en.wikipedia.org/wiki/Mastermind_(board_game\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e)\u0026gt;. The game master has created a 4-character code for you to guess, with characters ranging from \\\"1\\\" to \\\"6\\\" (e.g. code = [2 1 3 4]).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 first guess (this will be [1 1 2 2]) is already done and the game master has given you following feedback:\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe number of correct characters in your guess, in this case 1 because character \\\"1\\\" at index 2 is correct.\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\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe number of correct characters, but in a wrong place. In this case 1 because you guessed character \\\"2\\\", but it is in the wrong place.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eNow, your function has to do the next guesses. Each time your function is called, the input will contain the code and feedback of all your previous guesses, the output is a copy of the input with your new code added (refer to the example code).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 is shown you could solve the code in only 4 additional guesses (refer to the wiki page), you will however get 11 according to the rules of Mastermind.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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":44236,"title":"Mastermind I: Solve all 1296 cases","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\r\n\r\nTheory: Brute force can work but masking is much more efficient.  The optimal minimal guess solution requires only 5 guesses.\r\n\r\nFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: Brute force can work but masking is much more efficient.  The optimal minimal guess solution requires only 5 guesses.\u003c/p\u003e\u003cp\u003eFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n if isempty(mguess)\r\n  guess=[1 1 1 1];\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n   mguess(end+1,:)=mguessn;\r\n   mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n   mpegs(end,2)=mc(ptr,mguessptr);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Lsol=size(mguess,1);\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\n\r\nif solved\r\n fprintf('Solved in %.2f\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\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":21,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T14:17:00.000Z","updated_at":"2025-12-12T14:05:24.000Z","published_at":"2017-06-18T15:51: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\",\"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:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses is unlimited per pattern but a time limit of 45 seconds is implemented. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Brute force can work but masking is much more efficient. The optimal minimal guess solution requires only 5 guesses.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Five Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":44237,"title":"Mastermind II: Solve in 8 or less","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\r\n\r\nTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8.  The optimal minimal guess solution requires only 5 guesses.\r\n\r\nFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8.  The optimal minimal guess solution requires only 5 guesses.\u003c/p\u003e\u003cp\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n if isempty(mguess)\r\n  guess=[1 1 2 2]; % [1 1 1 1] is not a good first guess\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\nGmax=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved \u0026\u0026 Lmax\u003c9 % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n  mguess(end+1,:)=mguessn;\r\n  mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n  mpegs(end,2)=mc(ptr,mguessptr);\r\n  \r\n  Lsol=size(mguess,1);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n  if Lsol==8 % length of 8 and not solved\r\n   solved=0;\r\n   Gmax=0;\r\n   break;\r\n   end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\nif Gmax==0 % failed Guess max rqmt of 8\r\n fprintf('\\n Solution exceeded 8 guesses\\n');\r\n fprintf('Puzzle %i %i %i %i\\n',m(ptr,:));\r\n fprintf('Guessses and Responses\\n');\r\n fprintf('M%i %i %i %i   P%i %i\\n',[mguess mpegs]');\r\n fprintf('\\n');\r\nend\r\n\r\nif solved\r\n fprintf('Solved in %.2f sec\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f sec\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n\r\n","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":15,"test_suite_updated_at":"2017-06-18T18:19:06.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T17:46:47.000Z","updated_at":"2025-12-12T14:09:25.000Z","published_at":"2017-06-18T18:16:28.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[],\"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:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 8 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Simple elimination of invalid cases is sufficient to reduce max guesses to 8. The optimal minimal guess solution requires only 5 guesses.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":44238,"title":"Mastermind III: Solve in 1","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: A set of 25 cases will be provided that have optimal guesses and their scores. Solve the pattern in 1 guess.\r\n\r\nTheory: Elimination of excluded possible guesses will leave only one. Some solutions require only three total guesses so the input size will vary.\r\n\r\nFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: A set of 25 cases will be provided that have optimal guesses and their scores. Solve the pattern in 1 guess.\u003c/p\u003e\u003cp\u003eTheory: Elimination of excluded possible guesses will leave only one. Some solutions require only three total guesses so the input size will vary.\u003c/p\u003e\u003cp\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n% mguess and mpegs are kx4 and kx2 and will not be empty\r\n% The player gets only one guess\r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\nglobal m mpc mc mpc5c v\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  0 0\r\n6 6 6 6  4 0]; % case 947\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  1 0\r\n3 6 5 6  2 1\r\n6 6 5 5  4 0]; % case 940\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  2 0\r\n3 6 3 6  0 1\r\n6 4 4 5  3 0\r\n6 5 4 5  4 0]; % case 900\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 0\r\n1 3 4 3  0 2\r\n4 4 1 5  3 0\r\n1 4 5 6  1 3\r\n6 4 1 5  4 0]; % case 850\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  0 0\r\n6 6 6 6  4 0]; % case 947\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 2\r\n2 3 4 3  1 1\r\n2 1 3 5  0 3\r\n6 3 2 1  4 0]; % case 816\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 2\r\n2 3 4 3  1 1\r\n2 1 3 5  1 2\r\n2 4 5 1  0 2\r\n6 1 2 3  4 0]; % case 750\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 0\r\n1 3 4 3  0 1\r\n4 2 5 6  0 2\r\n6 5 1 5  1 1\r\n5 5 3 2  4 0]; % case 700\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  0 0\r\n6 6 6 6  4 0]; % case 947\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  2 0\r\n3 6 3 6  0 1\r\n6 4 4 5  1 0\r\n5 3 5 5  4 0]; % case 650\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  0 0\r\n6 6 6 6  4 0]; % case 947\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  2 0\r\n1 1 3 4  0 2\r\n3 2 1 5  2 2\r\n3 5 1 2  1 3\r\n5 2 1 3  4 0]; % case 600\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  0 0\r\n6 6 6 6  4 0]; % case 947\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 1\r\n2 3 4 3  1 2\r\n4 3 2 5  2 1\r\n4 4 2 3  3 0\r\n4 6 2 3  4 0]; % case 550\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 0\r\n3 3 4 5  1 3\r\n3 4 5 3  2 2\r\n4 3 5 3  4 0]; % case 500\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 1\r\n2 3 4 3  0 1\r\n4 1 5 6  2 1\r\n4 5 5 1  1 1\r\n4 1 6 4  4 0]; % case 450\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 0\r\n1 3 4 3  0 3\r\n1 4 4 5  0 2\r\n3 6 1 4  4 0]; % case 400\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 1\r\n1 3 1 4  1 3\r\n1 1 4 3  0 4\r\n3 4 1 1  4 0]; % case 350\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 2\r\n1 1 2 3  2 1\r\n1 4 1 5  0 1\r\n3 1 2 2  4 0]; % case 300\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  0 1\r\n2 3 4 3  2 0\r\n1 3 5 5  1 1\r\n2 6 5 3  1 1\r\n2 5 4 5  4 0]; % case 250\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 1\r\n1 3 1 4  1 0\r\n1 5 2 6  0 1\r\n2 2 4 4  1 1\r\n2 3 3 2  4 0]; % case 200\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 2\r\n1 1 2 3  1 2\r\n1 1 1 4  3 0\r\n2 1 1 4  4 0]; % case 150\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  1 0\r\n1 3 4 3  1 1\r\n3 2 5 3  0 2\r\n1 5 3 6  3 0\r\n1 5 3 5  4 0]; % case 100\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  2 1\r\n1 1 3 2  2 1\r\n4 1 1 5  0 1\r\n1 3 2 2  4 0]; % case 50\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\r\nend\r\n%%\r\nglobal m mpc mc mpc5c v\r\nmm=[1 2 1 2  2 0\r\n1 1 3 4  2 1\r\n1 4 2 5  1 0\r\n1 1 1 3  4 0]; % case 1\r\n[mguessn]=solve_mastermind(mm(1:end-1,1:end-2),mm(1:end-1,end-1:end),m,mpc,mc,mpc5c,v);\r\nif isequal(mguessn,mm(end,1:4))\r\n assert(isequal(1,1))\r\nelse\r\n fprintf('Invalid answer of %i %i %i %i\\n',mguessn)\r\n assert(isequal(1,0))\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":15,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T19:30:49.000Z","updated_at":"2025-12-12T14:19:44.000Z","published_at":"2017-06-18T19:58: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\":[],\"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:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: A set of 25 cases will be provided that have optimal guesses and their scores. Solve the pattern in 1 guess.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: Elimination of excluded possible guesses will leave only one. Some solutions require only three total guesses so the input size will vary.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFuture: Four Mastermind challenges will be created, [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":44239,"title":"Mastermind IV: Optimal Solver - max of 5 guesses","description":"\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v) \r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\r\n\r\nChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\r\n\r\nTheory: The optimal minimal guess solution requires only 5 guesses. The \u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\r\n\r\nMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]","description_html":"\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/p\u003e\u003cp\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/p\u003e\u003cp\u003eTheory: The optimal minimal guess solution requires only 5 guesses. The \u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\u003c/p\u003e\u003cp\u003eMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\u003c/p\u003e","function_template":"function [guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n% mguessn 1x4\r\n% mguess kx4\r\n% mpegs kx2  Location\u0026Color, Colors_Not_in location\r\n\r\n if isempty(mguess)\r\n  guess=[1 1 2 2]; % [1 1 1 1] is not a good first guess\r\n  return\r\n end\r\n \r\n guess=[1 1 1 2];\r\nend","test_suite":"%%\r\ntic\r\nv=1111:6666;\r\nvL=length(v);\r\nm=zeros(vL,4);\r\nfor i=1:vL\r\n  vp=v(i);\r\n  for k=4:-1:1\r\n   m(i,k)=mod(vp,10);\r\n   vp=floor(vp/10);\r\n  end\r\nend\r\nmdel=sum((m==0)+(m\u003e6),2)\u003e0;\r\nm(mdel,:)=[];\r\nv=m*[1000;100;10;1];\r\nmL=size(m,1);\r\n\r\nmpc=zeros(mL); % 0.030\r\nfor j=1:mL\r\nmpc(:,j)=sum(m==repmat(m(j,:),mL,1),2);\r\nend\r\n\r\nmch=zeros(mL,6); % 0.038\r\nfor i=1:mL\r\n  for k=1:6\r\n   mch(i,k)=nnz(m(i,:)==k);\r\n  end\r\nend\r\n\r\nmc=zeros(mL); % 0.06\r\nfor j=1:mL\r\n  mc(:,j)=sum(min(mch,repmat(mch(j,:),mL,1)),2);\r\nend\r\nmc=mc-mpc; % remove mpc part\r\nmpc5c=5*mpc+mc;\r\nfprintf('Initialization %.3f\\n',toc)\r\n% finished initilaiztion calculation in less than 0.2 sec\r\n\r\n\r\nztic=tic;\r\nsolved=1;\r\nGmax=1;\r\npcase=0;\r\nLmax=0;\r\nLtot=0;\r\nfor ptr=randperm(1296) % anti-hack randomization\r\n pcase=pcase+1;\r\n mguess=[];mpegs=[];\r\n while solved % loop until solved\r\n  ztoc=toc(ztic);\r\n  if ztoc\u003e45\r\n   solved=0;\r\n   break;\r\n  end % if\r\n  [mguessn]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v);\r\n  mguessptr=find(v==mguessn*[1000;100;10;1]);\r\n  if isempty(mguessptr),continue;end % invalid input\r\n  mguess(end+1,:)=mguessn;\r\n  mpegs(end+1,1)=mpc(ptr,mguessptr);\r\n  mpegs(end,2)=mc(ptr,mguessptr);\r\n  \r\n  Lsol=size(mguess,1);\r\n  if mpegs(end,1)==4 % break on solved to ptr loop\r\n   Ltot=Ltot+Lsol;\r\n   if Lsol\u003eLmax, Lmax=Lsol;end\r\n   break;\r\n  end\r\n  if Lsol==5 % length of 5 and not solved\r\n   solved=0;\r\n   Gmax=0;\r\n   break;\r\n   end\r\n end % while\r\n if ~solved,break;end % terminate case processing\r\nend % for all 1296 cases\r\n\r\nif Gmax==0 % failed Guess max rqmt of 5\r\n fprintf('\\n Solution exceeded 5 guesses\\n');\r\n fprintf('Puzzle %i %i %i %i\\n',m(ptr,:));\r\n fprintf('Guessses and Responses\\n');\r\n fprintf('M%i %i %i %i   P%i %i\\n',[mguess mpegs]');\r\n fprintf('\\n');\r\nend\r\n\r\nif solved\r\n fprintf('Solved in %.2f sec\\n',ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nelse\r\n fprintf('Solved %i of 1296 cases in %.2f sec\\n',pcase-1,ztoc)\r\n fprintf('Lmax %i   Ltot %i\\n',Lmax,Ltot)\r\n assert(isequal(solved,1))\r\nend\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":5,"created_by":3097,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":14,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2017-06-18T20:04:24.000Z","updated_at":"2025-12-12T15:50:04.000Z","published_at":"2017-06-18T20:39:39.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:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eChallenge: All 1296 cases will be provided. The maximum number of guesses allowed is 5 with a time limit of 45 seconds. The user will see their prior guesses and the guess response.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eTheory: The optimal minimal guess solution requires only 5 guesses. The\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e link contains a description of the Knuth Five-guess algorithm. My description of this process with Matlab in mind is: Select the guess that will create the fewest remaining possible solutions for the worst case guess. All guesses are evaluated for the viable remaining possible solutions. Use Matlab array ability to mask the mpc5c variable by remaining cases. The hist function is too slow so create a hist array of states [0:8 10... 20] for all guesses [21,1296]. Sorting of the hist array is used to find a min solution group. Select the first guess with the lowest remaining solutions maximum. A guess that is not a remaining solution is only used if it has the lowest remaining solutions maximum. A later guess is possible if the first size is tied and its second size is less than the second of the earlier guess.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind challenges: [Solve no limit, Solve in 8 or less, Solve in 1 given a guess pattern, Solve in 5 or less]\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":44248,"title":"Mastermind V: Optimal Solver - average number of guesses","description":"The following description contains a copy of Richard Zapor's \u003chttps://www.mathworks.com/matlabcentral/cody/problems/44239-mastermind-iv-optimal-solver-max-of-5-guesses Mastermind IV: Optimal Solver - max of 5 guesses\u003e\r\n\r\n\u003chttps://en.wikipedia.org/wiki/Mastermind_(board_game) Mastermind\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\r\n\r\n  Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\r\n[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n\r\nwhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.  will be provided. \r\n\r\n*Scoring:* the average number of guesses of all 1296 cases.\r\n\r\n*See Also:*\r\n\r\n\u003chttps://www.mathworks.com/matlabcentral/cody/problems/44236-mastermind-i-solve-all-1296-cases Mastermind I: Solve all 1296 cases\u003e\r\n\r\n\u003chttps://www.mathworks.com/matlabcentral/cody/problems/44237-mastermind-ii-solve-in-8-or-less Mastermind II: Solve in 8 or less\u003e\r\n\r\n\u003chttps://www.mathworks.com/matlabcentral/cody/problems/44238-mastermind-iii-solve-in-1 Mastermind III: Solve in 1\u003e\r\n\r\n\u003chttps://www.mathworks.com/matlabcentral/cody/problems/44239-mastermind-iv-optimal-solver-max-of-5-guesses Mastermind IV: Optimal Solver - max of 5 guesses\u003e\r\n","description_html":"\u003cp\u003eThe following description contains a copy of Richard Zapor's \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44239-mastermind-iv-optimal-solver-max-of-5-guesses\"\u003eMastermind IV: Optimal Solver - max of 5 guesses\u003c/a\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://en.wikipedia.org/wiki/Mastermind_(board_game)\"\u003eMastermind\u003c/a\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eAnswer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.\r\n\u003c/pre\u003e\u003cp\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/p\u003e\u003cp\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666.  will be provided.\u003c/p\u003e\u003cp\u003e\u003cb\u003eScoring:\u003c/b\u003e the average number of guesses of all 1296 cases.\u003c/p\u003e\u003cp\u003e\u003cb\u003eSee Also:\u003c/b\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44236-mastermind-i-solve-all-1296-cases\"\u003eMastermind I: Solve all 1296 cases\u003c/a\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44237-mastermind-ii-solve-in-8-or-less\"\u003eMastermind II: Solve in 8 or less\u003c/a\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44238-mastermind-iii-solve-in-1\"\u003eMastermind III: Solve in 1\u003c/a\u003e\u003c/p\u003e\u003cp\u003e\u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/44239-mastermind-iv-optimal-solver-max-of-5-guesses\"\u003eMastermind IV: Optimal Solver - max of 5 guesses\u003c/a\u003e\u003c/p\u003e","function_template":"function guess = solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\r\n  \r\nend","test_suite":"assessFunctionAbsence({'regexp','regexpi','regexprep','str2num','!','system','unix','persistent'},'File','solve_mastermind.m')\r\n\r\n%%\r\nv = 10 * (1:6) + (1:6)';\r\nv = 10 * v(:)' + (1:6)';\r\nv = reshape(10*v(:)' + (1:6)', [], 1);\r\nm = dec2base(v, 10) - 48;\r\nmpc = sum(permute(m, [1 3 2]) == permute(m, [3 1 2]), 3);\r\nmc = histc(m, 1:6, 2);\r\nmc = sum(min(permute(mc, [1 3 2]), permute(mc, [3 1 2])), 3) - mpc;\r\nmpc5c = 5 * mpc + mc;\r\nL = zeros(1296, 1);\r\nP = [1:1296 randi(1296, 1, 6000)];\r\nt = accumarray(P', 1);\r\nfor p = P(randperm(end))\r\n  mguess = []; mpegs = [];\r\n  while 1\r\n    mguessn = solve_mastermind(mguess, mpegs, m, mpc, mc, mpc5c, v);\r\n    k = v == polyval(mguessn, 10);\r\n    assert(any(k), 'invalid guess.')\r\n    mguess(end+1, :) = mguessn;\r\n    mpegs(end+1, :) = [mpc(p, k) mc(p, k)];\r\n    if mpegs(end, 1) == 4, L(p) = L(p) + size(mguess, 1); break, end\r\n  end\r\nend\r\nL = sum(L ./ t);\r\nfid = fopen('score.p', 'Wb');\r\nfwrite(fid, uint8(sscanf([...\r\n  '7630312E30307630302E3030000D201C07E23FB1000000340000015B000001C36FCD46'...\r\n  '4336A6F9BD2918A670F86BF0AC534F616971CE31A66833ECF344BF30BF9F163C19F925'...\r\n  '0AC8280807727BFFC8E8FF46AA63FA75C2890672D48C5599920C846EB7E0E230FDC14E'...\r\n  '1EA1768A5F84951A22717883064D6B9AD895493F53F6443E63783C5BFDD36A65EE33DB'...\r\n  'DF0C38A4238848AF99B21B91FC5F8E0E31A8D33533721B36C2AB371D7B4D59A1036FBF'...\r\n  'E2A4A0233812C46AA22FE134B0DE0FCFDCDCD4A49106161DDD64A97EC0B1F14A8E1FB4'...\r\n  '81CE94D11A50006D5AA9536055488421EC1682EF9945B98FB175A9CE96624DE8C575C2'...\r\n  'B442A7EAD282A0A90E89D3F25C7B22AF0D1FA61A2F76ED95E8C6EF78A197B13C3B570E'...\r\n  'D2F8EA301AAA8795CB4B2DEF21140589C0FC80A0B75F896CCEB1B560C07273FC4BCBD5'...\r\n  '5D98ED8516915D9A344A91D913E1E106F8CB3C87EBDBB7C0501AE307F5B1807555F8D2'...\r\n  '65EE53842038231C5E6C0BFDC5EB1A33CA999C68E612C9DC17050B9606'], '%2X')));\r\nfclose(fid);\r\nfprintf('Average number of guesses: %.2f', L / 1296)\r\nscore(floor((L / 1296 - 4) * 100))\r\n\r\n","published":true,"deleted":false,"likes_count":2,"comments_count":14,"created_by":1434,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":13,"test_suite_updated_at":"2017-07-04T07:08:13.000Z","rescore_all_solutions":true,"group_id":1,"created_at":"2017-07-02T23:16:44.000Z","updated_at":"2025-12-12T16:02:19.000Z","published_at":"2017-07-02T23:16: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\u003eThe following description contains a copy of Richard Zapor's\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44239-mastermind-iv-optimal-solver-max-of-5-guesses\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind IV: Optimal Solver - max of 5 guesses\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:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Mastermind_(board_game)\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a code breaking logic puzzle. A pattern of 6 colors(values 1:6) of four positions (1111;1112;....6666) for a possible 6^4(1296) cases is generated. The solver plays a length 4 vector with values 1:6. Accuracy of the play is returned by a count of values in the right position and a count of values(excluding those in the right positions) common to the solution.\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[Answer:1233  Guess:3231 Response: 2,2  as x23x are right value/position, 3xx1 are right values.]]\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\u003e[guess]=solve_mastermind(mguess,mpegs,m,mpc,mc,mpc5c,v)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ewhere guess is a 1x4 vector, mguess is the kx4 matrix of prior guesses and is empty on first try, mpegs is kx2 giving right [value/position, values] for mguess, m is a 1296x4 array [1 1 1 1;...6 6 6 6] of all solutions, mpc is a 1296x1296 array of 0:4 for value/position solutions, mc is a 1296x1296 array of 0:4 for value solutions, mpc5c is state array of a combined mpc and pc of values 0:20, 5*mpc+mc, and v is integer value of solutions 1111 thru 6666. will be provided.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eScoring:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e the average number of guesses of all 1296 cases.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eSee Also:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44236-mastermind-i-solve-all-1296-cases\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind I: Solve all 1296 cases\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:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44237-mastermind-ii-solve-in-8-or-less\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind II: Solve in 8 or less\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:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44238-mastermind-iii-solve-in-1\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind III: Solve in 1\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:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/44239-mastermind-iv-optimal-solver-max-of-5-guesses\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eMastermind IV: Optimal Solver - max of 5 guesses\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\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":3099,"title":"Rumis Scorer 1","description":"\u003chttp://en.wikipedia.org/wiki/Rumis Rumis\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\r\n\r\nFor this problem, you will be provided a completed 2-player rectangular board where the two players' colors are red and blue. The board will be two levels high and completely filled. It will also be a character array wherein the two players' squares are represented by 'r' or 'b'. See the test suite for examples.\r\n\r\nWrite a function to count the squares visible when viewed from above to determine who won each round.\r\n\r\n\u003c\u003chttp://www.exodusbooks.com/Samples/Games/RumisCoricanchaBig.jpg\u003e\u003e","description_html":"\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Rumis\"\u003eRumis\u003c/a\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\u003c/p\u003e\u003cp\u003eFor this problem, you will be provided a completed 2-player rectangular board where the two players' colors are red and blue. The board will be two levels high and completely filled. It will also be a character array wherein the two players' squares are represented by 'r' or 'b'. See the test suite for examples.\u003c/p\u003e\u003cp\u003eWrite a function to count the squares visible when viewed from above to determine who won each round.\u003c/p\u003e\u003cimg src = \"http://www.exodusbooks.com/Samples/Games/RumisCoricanchaBig.jpg\"\u003e","function_template":"function [winner] = rumis_scorer1(board)\r\n\r\nwinner = 'r';\r\n\r\nend\r\n","test_suite":"%%\r\nclear board\r\nboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\nboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n%blue wins 22 to 20\r\nassert(isequal(rumis_scorer1(board),'b'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['brbrb';'rrrbb';'bbrbb';'bbrrb';'bbrbr'];\r\nboard(:,:,2) = ['brbrb';'rrbbr';'bbrbr';'brbrr';'rbrrr'];\r\n%red wins 14 to 11\r\nassert(isequal(rumis_scorer1(board),'r'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['brb';'rrr';'bbb';'brb';'bbr'];\r\nboard(:,:,2) = ['brb';'rbr';'rbr';'brr';'rrr'];\r\n%red wins 10 to 5\r\nassert(isequal(rumis_scorer1(board),'r'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['rrbrrbr';'rbrrrrb';'brrrbrb';'rbrbrrr';'rbrbrbr';'brrrrbr'];\r\nboard(:,:,2) = ['brbbbrb';'rbbbbbr';'bbrbrbr';'brbrbrr';'rbrrbbr';'brbbbbr'];\r\n%blue wins 25 to 17\r\nassert(isequal(rumis_scorer1(board),'b'))\r\n\r\n%% anti-cheating case\r\nind = randi(4);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'b'))\r\n\tcase 2\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brbrb';'rrrbb';'bbrbb';'bbrrb';'bbrbr'];\r\n\t\tboard(:,:,2) = ['brbrb';'rrbbr';'bbrbr';'brbrr';'rbrrr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'r'))\r\n\tcase 3\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brb';'rrr';'bbb';'brb';'bbr'];\r\n\t\tboard(:,:,2) = ['brb';'rbr';'rbr';'brr';'rrr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'r'))\r\n\tcase 4\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrrbr';'rbrrrrb';'brrrbrb';'rbrbrrr';'rbrbrbr';'brrrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rbbbbbr';'bbrbrbr';'brbrbrr';'rbrrbbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'b'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(4);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'b'))\r\n\tcase 2\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brbrb';'rrrbb';'bbrbb';'bbrrb';'bbrbr'];\r\n\t\tboard(:,:,2) = ['brbrb';'rrbbr';'bbrbr';'brbrr';'rbrrr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'r'))\r\n\tcase 3\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brb';'rrr';'bbb';'brb';'bbr'];\r\n\t\tboard(:,:,2) = ['brb';'rbr';'rbr';'brr';'rrr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'r'))\r\n\tcase 4\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrrbr';'rbrrrrb';'brrrbrb';'rbrbrrr';'rbrbrbr';'brrrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rbbbbbr';'bbrbrbr';'brbrbrr';'rbrrbbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'b'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(4);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'b'))\r\n\tcase 2\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brbrb';'rrrbb';'bbrbb';'bbrrb';'bbrbr'];\r\n\t\tboard(:,:,2) = ['brbrb';'rrbbr';'bbrbr';'brbrr';'rbrrr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'r'))\r\n\tcase 3\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brb';'rrr';'bbb';'brb';'bbr'];\r\n\t\tboard(:,:,2) = ['brb';'rbr';'rbr';'brr';'rrr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'r'))\r\n\tcase 4\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrrbr';'rbrrrrb';'brrrbrb';'rbrbrrr';'rbrbrbr';'brrrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rbbbbbr';'bbrbrbr';'brbrbrr';'rbrrbbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer1(board),'b'))\r\nend\r\n","published":true,"deleted":false,"likes_count":3,"comments_count":0,"created_by":26769,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":44,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-03-20T02:49:07.000Z","updated_at":"2026-03-04T14:57:42.000Z","published_at":"2015-03-20T02:49:07.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Rumis\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRumis\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this problem, you will be provided a completed 2-player rectangular board where the two players' colors are red and blue. The board will be two levels high and completely filled. It will also be a character array wherein the two players' squares are represented by 'r' or 'b'. See the test suite for examples.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function to count the squares visible when viewed from above to determine who won each round.\u003c/w:t\u003e\u003c/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\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGuAosDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKCQOtABSEhRknArO1HW7PTYmeaVRgdzXlHiv4uRx74dPO9uRuzwPxpNpAepal4isNNUmaZBj1NVNN8Y6VqbYhuY29wwNfKWs+Lr/Vp2aedpOfu5+UVQstev9OnE0UrIc5ytGvYVz7cSRJFBVgQadXzx4Q+MMsTJBqByP74r2nRfFWn6xArwzodw7Gi4zeopFYMMg5FLTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqvc3sFqhaVwoHqa888VfFLT9JV4oZA8vZVOTQB397qdtYxl5pVXHqa8x8WfFq0sQ8Nm3myjjCnpXkXiP4i3+syOpnZEJ4RD/WuPklnumyScUld7CbOg8QeOdS1mZvOnOw/wKeK5zzJ7p8Mx+lbui+ErvVXTy0wjdWau6s/C+kaTCBNiS4HUnpQ2ouy1Y1BvVnDaP4QvNSIcp5Uf95u9aGp+DpbeBngPm7RyMV2kepxROF24jHpVhb2CRvlX5TXPVqYijK842Rd6KW54pJbz202NpRhWvo3im+0acNFK64PY8V6FqPh621UNsjAb+8OtcVq/hObT0ZwvmgddvatYVadVdmS4NarVHq/hH4wRybIL9tp/vZ4r1zTNdstTiV4ZlOfQ18VCKWBt8eVx2roNA8b6los6lJ2CDqpPFW01uTc+yQQRkUV5F4R+LlnfhILxxHL0+Y9a9QstTtr6MPDKrA+hpjLtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUySVIlLOwA965TxF480zRIWLzruHbNAHUzXEUCFpHAA9a4fxP8SdM0SJh5ymTsoOSa8i8VfFe71AvHay+VH655NeYXOoXF9OztIzs3VmOTSTvsK53Pir4p6nq8jxwOYYT6H5j/hXCPPc3rkncSeSSasadol3qU6pBGzlu+OK7zSvA62IV7+RW4yYwaUpRh8W41FyOO0vw9dX8qpFCSSeWPSvQNO8JadpNsZL9xJMeg7Vpfabe2txDbxquOOB0rIvvOuH81ZCzAfdPSuqlhK9f4vdj+InUpw82aj3ywxiO1AVAMDFUZC8jEuxOetVYpBgBxsb0NTFyB0zXq0MLToK0Ecs6sp7i+Uvc0zc0f8Aq81J8pGSwpDtH0reUIzXLJXRlcsW188fJYqfarpuBLGVJB3dcjg1jSSLt/djc1LCkpjcvLgn07V4mKyf7VB/I2p1pQ2KmoeGI9SLmIhH5OF71xuo+HrrTwfNRimfviu/02A2c0jvO7BhwM1LeBp4zHhdp7NXnudWhLkqI9CMY1Y8y3PJQZrdwY5DXceFviHqGkSIhuGZB1Vz/Wqep6BCWzAdrYziudm02eNyPLII71suWprF6mUoyjufT3hb4n2GqqsU0gSXuCa9Bt7yG6QPE4YH0NfDsFzcWUg2yEEHPBr0Lwz8UdQ0d0WeQzQ+55FGq3JufU9FcP4Z+Iuma5CuJ1DnqCeRXaRTxzKGRgQfSmMkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKQkKMk4rH1bxJYaVCzzTKMDuaANdnVBliAK57XPF+naPCzSzKCPevJ/FvxgLeZBp3PbeeleR6p4kvtVnLyTO7k9SeBSvfYVz03xb8XLi4Z4bIlEP8AGf8ACvKr7WbvU52Z5Gdj3Y1WNtNKdzksT2rUtNClkVZXGxKJRUdZsai5PQxo7GeeXaI2Yniuh03wuYyr3J567B1xWzp1r5LiNIcj+9WxBaxwuZJGLHrj0rH2vPNU4u1y5clNXkLYTQabBsiRUHoOtJPfTXRyCcDtmqd+6SXilTsQjninRzRIuAwY+tfR4fBU6GqV33ZxSrOZZUnA4PuaV5QvCkE45qs1ypBGaqSSZPfFdaMlHuX/AJJMmQgjHAqJTLCxKHfGf4T1FUpbry13dAPWsm71lyCIyR70pNJalKDex0Ul0pC+WuXPbNOibcR5p/AVx0N7LktuOc1qWerHcA5x70Jpq5Tp2OkBVV+UYFPBG3HrVOC5SQD5utT7sHjkUzLlsSnhRg0zzQHBbnFDMEUsetZl5qUcQIzzWVWjTqq01dFQc4v3WTTLvuQ2dw9KbKUuFaIRfpWKuoPPdIoOFJ5rYOWXn5eO1fPYvCxoztTkevR56kOZo5u+0eJXaWInr901i3Ns8bElCortJoC5+Ulj6U+a1Se2AlhXjqawjWcdJkypJ6xOIstRurCYSQTOjDoQa9R8IfGG8sHSDUSXTpvH9RXA32jxq26Akr3FZX2R1Y8EHtWytJXiYNOO59i+H/G2m63AjRToSfeunR1dcqQRXxBpus3+kXAktZnjYHnB4NeueEPjM0bJb6n8vbf2/wDrUCufQtFYej+J7DV4VeGdDuHY1tghhkHIoGLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVO81O2sYy80igD1NAFwkDrWbqOtWemxM80qjHqa858V/Fi0sFeK0YSOOODwK8V8QeOr/WJX8yZmU/wA8Ur9EFz1rxZ8XI4FeKwO89NwPArxnWvGF/q8rNLMzkngZ4H4VhSNNccuSfatnTtD+2wgj5B6kcmjl0vISvLRGU0E8oEjkkntVux0yRn3MAF9+tdTa6FBZqFYl3PQe9aEekQjmTr2ArOeIjD4S3CMFebMyy0yKOHJTcx71r2tiiKd7EjstWgqRxeWqjH0qAo6nKk/SuKpWczGeIe0NCXKhcJwBSquRyeo5qJHzlSMGiZwkDleoXNXhf48fVHLNtq7M3UovLVmByegrAaeRScEg1ba7aUEM2cVSf7xzivuAgrFyG5YKuec0s+oCPKgBm/lVJW+ULnvRNGQSTxWdSfKjVRT3K1zdyTZ3MTVJ2IFWpEGaqSj5unFcdSbZpFJEtqSVNS9G4qG1OAan71vTfuoLFu1vHiOM1rxamBAzsQNvaufUHNSSgrbk+tauVlchxTLN5rssmdpwKymumkbJYk1CWJ60mB2rllVkzSMEti9ZS5vEz611ke4AZ5FcdYqRdoRzzXXiTaOegrwcyblNeh7OX6QYrxbmypIPtTWJ4WVsAd81Xl1NQSkKl39qSO1numD3DFR/drljVaVqm34nTUowqfBuWFto5c7MHJ4Oail0qO6OxhgjjIq8FWEAIMYpS46rwTW0LPWm/8AM4qlCUNJrQ5290EQBghDqBzzzXOz23lklCa73ypCrN1zxWdd6VFKy78J7gVtGsnpJHHOj/KYuh+KNR0KdWtZ3VQeUJ4Ne1+EPjHBcbINQPlv0yTwa8Xu9HkjJOzeuM5Wsd45IJOMg1bj1Rjqj7c07W7PUoleGVTn3rSBz0r428OeONV0GZRHOxjH8DHivcfCPxastSVIrp/Lk6YapGesUVUs9Rtr2MPFIrA+hq3QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUU1xFAhaRwAPU0AS1XubyC1QtK4UD1NcZ4m+I+m6LEwEylx0AOTXiHib4o6hq0rxxO0cR7A8mk2K57F4o+J9jpaPHA4eQdlNeI+JfiJqOrzMhlYIc/Ih/rXJT3VzfOfMcjPNaulaBLckOIzt/vEcUcrteTshq70RhyS3Fy5Dk4PatPTtFmufuR9uSa3Bo0UE3mMN5HXI4rXsZljiZQhViOuOlZPERStA2hQb3Mm00WG1I81cv71r2tsisVLhMcgCnsd4+bkjvWddySLKMZHHFckqrm99TbEU50aXMlY29yqAFAyO9OwWxmsi01HZxLk56GtIS+Zgqe1YOLuePJtvUkx/Dmkxj600uByetV7i9SHqcsegFCTZJM5XblsD3rLvNQjiDxrlyR/DzipPLu70gyN5MR7dyKkktIoLdliXnufWt6MlTmn1QO1tTk/NUucHn0oYk067tFMrMpKtntVUSNDxKDj+9X1NDHQqKz0ZpGzJ1bEi/WtWS334JI55rKiKyEFTmtvK+Urseg71WKm1FWNoJGZcW6oOOTWVcJhuOT6V1Fppl5rM/l2UR29DIw4FdjpXgG0tdst3++lxznpmvnsXm1HC6Sd32Omnh5T1seVwWlwIvMaF1Q9CRUqxE5r3KTRraS38l4UKYxjFcnq/gUMfN08hcdYz3+lVl/EmHqvkq+6+/Qqrg5RV1qcAkQGKS8XbBV+ezltJjFOjIwPcVTvyPJGK+kUuZXWxyGTs4460Yp4yT8opuwgnJyfauSUlHVs1Svoh8D+XMGXnFbUMV1fYLsY07Csu0gXzVLV1MSjy1xnOK8bGVlOV4o9bCUWo2kxbazitk+VQT6nrVgZJqEeZG2XyRViGRT715z7npRVtELtyORzSNEMcVOSoGT0qndXqxrwcAVEW76FNJrUN/l55Aqm13CshD/ADHvzWbd6gXJCmnaMqXV04l5GK7lOXLeep5WL9lBcyNZrmGW32QjB71n3Oirc7WUbWPSr02mGMboWJHpU9pe+VlJ0yw4B9KUa7+yca5ai7nK6ho09sv7yInPQqKzALizbKEjHavUIruBgN0YcEYway9T0i2uQz26bHPQdq3jiIy0nozKdBrVFPw38StU0OVEeRpIh1DHkV7l4U+KOm61GqPMqyd1Y4NfMd9pVzbSHzUOOxFVYZ57OUPE7Kw6EHGK25dLox1W59y291DcoGjcMD6Gp6+V/CnxY1HSZEhu2aaLpnuK908NfEHTNchXbOu49RnmkM7SimRzJKoZGBB9KfQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNZ1QZYgCgB1MklSJdzsAPeuf1zxfp2jQs0s6AgdzXivi74wz3LPBpxIU8bzSuB694i8eaZocDNJOmR2zXiHir4uXupM8VkxjjPG7ua87u9RvtWuWluJXkY92NS6fpE95JtSJnf2FPlb30Fcr3N9eX8rNI7szdSTkmrmlaRdXT4ityxP8RHArutG8EQwKk+oyAuOREo/nXYwW9lDBhI0hHcdqwqYiNPSnqzWFK+5xOm+DoEUSXZEjf3R0FbrWQtrdV3BIugFS3OpQ25eOD5z2Pasma4muceYSRXnSrSk7yZ6dDByfSyILp4A2zJJ7GkVcLxyKc0SsMEZqJkaJfkOR6Goc2z0qdCECTIArOv23OMDj1q0ZQR6H0qleNvHy4yKqC944sz1oMrOAO/NTQzPFggn6UJCWAyvPrVgW5ABwK1lJdT5pkjzG5ZYojtYj5iauW+niMbgu5z/Eaz4VH2sr044rSiuJIeCcis5Sa0RDi0iZrdyvPaq1xFIoIxkYrRS6WReSOnSq9xMCvYGpjN3Mzl7mE7ySMVUaFXGGA5rojay3j+XFGXY9gK3tG8Bu7ia+bavXyxWtXHU6EbzZvRoTqP3UcLYeHbu+uMWSEn07V3mk+AS2yTUmLFefLU8fjXb2WmW1hFst4lQewq2owK8TF8QYirH2dN2j+J7NDCRp6y1ZRtNOt7OJY4YlRR0AFWHiwvFTkA0pA6V4Tm27s60ysEymO9HlgDBqXbzxVa8vLayiMtzMsaD1NON5OyKuZ+qaDZ6pCVmiBY9GHUV5P4s0UaPKIVmEgPQZ5FdX4h8fkM8GmKVUDBlPU/SvOri7kuZWkmkZ3J6sc19lkssbh170vdfR/wBaGFbDwnvoUwp78e1PUAdBSdTTl681605ynq2KnTjDYs2w/eAntXRW/KjmsC2Qlxgc1uwfu0y3SuOqzupRLoGeDio5EjA3D5WHeqp1GJQe/pWVf6qz5AOB6CsFCUnZHS3CEeaTL11qKxxld+WrBu79nz81VJLguT1qAknOa7adFR3PMr4ty0jsP81mYEmui8NqWncgdua5noK6PwvJtuHJPG2tKq9xnm153pu51WCp5B4qvN9nlRvNXbjvim3N8sbFVO5/QVS8me5YNKdq/wB0VGGwNTEbKy7nnRqODumV3nmhcvbAOg6E1Lb+JtsqrcRqnY8davGBFUKBVG702GcfMoB9a9OplLjH3feOmGMv8Rbuby0urUlgm0+gzXKXFixdnRTszwDVh7S5sZSY23xg5Aqx/aUM0YR1KP3z3NcK5qWiOi8am5zdxblWzjYaksdSvNMlEsErIw/iBroUsIr1suVwB1JqpqGkm3XMKb09a1Uoy30ZjKm0d94R+MNxZlIdQYsvTeP617doPjLTdagR4p0JI7Gvjv7I5VnA2Y7Va0vXdR0a4ElvO6EHseDQ4tEJn26rq4ypBFOrwDwf8ZcbINSO09N/avZtJ8SWOrQq8MynI7GkUbNFICCMg5FLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUE460AFISFGScCs7Udas9OiZ5pVGPU15L4v+Mltbb7ewbzJOnyngfjQB6nq3iSw0qFnmmUYHc1474u+MYw8OnHPbdnivJta8XanrdwzTzuVP8IPArKgs7i8nWNFZ2bpilqK5f1TxBqOtTlppnck9z0qKx02a4uAgiaRz6DNdPpPgm4+SS+xEnXb3Nd9p+n2VlARb2yrgYLd/zrCWJhD4dWaRpN7nNaT4ExCJr0rzyEU810sWmxaZGFghWNe+OtX4JBIgW3UyS56CtO10F7j5ryQj/YWvKxmYxj8cvkdMKSXQxReLDbSMIC+0Z4H9a5KfVJbuUgkqufu16teWEMGjXEUUaqPLNePbMSt6g1y4XF/WOZ2tY9fL6MHe61L207QcU7nNRRzFR83IpxvIycIMmtrs9WVOyJMYBBqCWVU68imo9xdSeXBG0j+iiun0jwHcXe2fVHMaHnylPNTUrQpLmqM46tSMNzkkguNQlEVrA8jE4yo4B9zWxJ4B1S2iWZpUdgMtGOten2GmWmm24htoVQDvjk1MwryqubzT/dKyPMrTVZcrWh420JhlMboVYccil2qODXpWp6BaakCWTbJ2YVw+q6Lc6ZIcqWjB+9XZh8dCvo9GeXVwjjrHVGJtK6go6ArVvblsHpVATj+0U54IIrTBBx613z6HHaxC0ZVuCc1Np9qL7UYbeQkBmwSKJF59/wBan0LKa7bnqd3FZTqNU5Nb2Kp04ymkz0fT9CtNOiAgjBP949ateXtPSrKOQgpxRWHua+QlVlJ3k7nsR9xWRU25FIENWWixim7cHGKnmNOa5CVpoBJxVjZTljGeaadxc1jn9fvrvTbQva2xlb1HavKdYvL6+kaS5kYnP3ewr3d1jZSGUEHtXL694TsdTVmjQQzHoV6GvXy/GUqDtKPzOijWgtJI8MmDB+arkDv1rrda8MXmlMTNGWjJ4ZRxWN/Z28Bh0r6uliKc480XoX7Fz1jqZiqSeKtw2xbqKuJaLGMnHFRyXSw8LgVbqN6RLVBQV5kiJHbDdnn0qKe7MgwGwvpVGS7L5xUAcnnNCp9WRKvHaJNPKQPlqg7lieanmb5etUS3zVvCOhw16jbJUHFD/LUfmc01m3cDmrUWc/tFYeSD1rR0lpBK2xtoI+9WYkJJBJ/Cuh0qD5R2BqueEHeSuhKhKsrbGvbwovOcsecmrbZAAqksDxtuQnHXBqVLr5sSLg17uGxdGqrQ08jz6+FqUneRZDbWqQIHBxj8aYACM1Vu7hIRkviuw5Er6EslvlugNZOo2UK8OQrnpjrTH1t0jZYzye5rPSd7m8RnJY5rixkacoNtanRS54u/QYJLrT5QsiEpnOCOtakeqRXEYUSEP/dI4FbElvHPEFkQMCB2rEu/D5DGS1bn+7XzKqxlpLQ6Kde+gyWwklfG1vm9qy5dKmViWU7R04q/Bqt5p7+XcKWAP8Vag1GK5hwhVpDzg9q3VSUd9UbcsZHIG1kEnyHB9K1tE8WapoM4MM7KoP3CeKtTWiMjuTtcdMd6xJ7d0J3KWFa3jPYylBxPfPCHxitrvZBft5ch4+Y8H8a9Z0/WLTUIleGVTn0NfEXlSxqZFJUV0nhzx/q2gSoFmaSIdUY/ypWaFc+yetFeVeEfi3p+rKkNxII5e6scGvS7S/t7yMPFIrA+hoGWqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiq9zeQWqFpXCgeprz3xV8UtO0hHjilVpccAGgDvrzUraxjLzSKoHqa8w8W/F2x00PDauJJR2U14/4n+I+qa3IyJM0cR7Kf61xbCWZ8uxJNCTewrnT+IPG+reIJWDTMsZ/hU8fjXMJGZZsOSSfStnStGuXIZ48Rnuwrq4dDsbaJJl2+ZjJ9aynVjDzNI02znNK8MySTb7kmKLGcEcmu10xbPTEVLW1yxHJYc5qOzZZ7pYxG0rk4CqMmuu0zwfPcSrNeMYo+yDrXlYvHqn/EdvI6YUYowkNxdzjETyv2Ve1dFYeF76XBvbgxxH/lktdbZ6Za2CbYIgD3Pc1ZI5r52vmk5+7T0RsoooWlhDYwrHEgUL371dRc80rYxQo28ivMcm3dlkOoIDYTf7h/lXiki4mbH9417bdtutZR6qa8Un+W6kUno5/nXs5S9JfI9LL9GxFbBqBIwboAnAY4NTj71Qni5U+hFewj1J3seyaDo1jp1lH9njXeygs5HJrXKYFUdOf/AEK3I/55j+VXt24c18bUqSlNuTPmJ35rsZtzUbgCrAXjioZB3rLmuxRK20gmoLiFJkKyKGU+oq2epqNgc9KtOz0Nkzhde8IA5udPA8wfw1yqXDQTGC7jaKVe5HBr2ELznFZmraDZatEVmiAfHDgc16+FzNx9ytqu/U5a+GU9YnnhwehB+hqfRx/xO7bAI+brnpUGqaBqGhzZXdNbeoHQU7QbmObWrcdBv5FerNxlRlKDurHDCnKFRJnrcf3cVIKYmNo4qUYxXx7PSYBueacVB5FNxnpSgkGgLCYAopxwTQehFCYrkLL70wgZ5qRuBk1Wlu44sjPNXG72LSb2I7mCKaMpKisp7EV5b4202z0p1ltcqH6qOgNehTXjyMecLmvO/iLNuiiA7V7WVKarqN9GdUOamuY4ebUSEKrWY87Ock01myOahLYNfZQppbHJWxE57ssqeM05ZAI6qecNuKYJGBwO9XyXMfbJMmll5Iz1qqSc08KWPNSCHJHrVKyMZOU2RxqWOM4qwkBHSpI4ADnFWo0OelROZ0UaC6jYIeRnrW/ZARxYPBrMij554rRgBBA6iuSo7nqUoKK0NFGL8DpRNAMZIyKarCNc9B61m32rqilU5PrUUnK/ulVYw5byFu9QNrGf3gIxwp7VgzXklwxJOaq3s7SsWYnrRF90Yr6TC1akoWkz5uvGmp3grEgPvV3TgTeRj3qoFJ7Vc09tt2hNaV1+6l6GD2OvXhcd8daaZAg7VTa6L/KnpTo4yeZGyTXj4XLalfV6I5WNvI47xdjRA/7VYd1o81uTJAxIHaujyCeKQpnPNey8spqFoOzNYVnHRnKC/liHlyg/U1dt7mDy/nXzGP8ADWhdadHdfeGD61i3OnTWpLICwryq+FlSfvI7IVFLYfcW0VwhAyh5+lYj2rKSuM89a2ILtZgsc7bQvHAqfZEGIX54j1OKyVRp2ZXIpbHPIJoCJFJXB4INdx4W+J+q6HIiTSNPCOuTyP8AGsZ9KFxuaMFUA6tWLdWnlSbR19a192Wxm4uJ9U+FPidpeuxKvnqJO6k4IrvYLmK4QNG4IPoa+F4JrixnWSJ2jcchlODXpPhP4uahpTpDfFpYhxvHUUthXPqWiuO8N+P9L12BGjnQsfeuujlSVQyMCPagY+iiigAooooAKKKKACiiigAooooAKKKKACimSSpEuXYAe9cr4g8dabosLFpl3DtnmgDqJriKBC0jgAetcV4m+I2m6NGyiZS46AHmvHfFnxcvL93is2MadM9685uLu91KRpZXZgepJzS1ewrna+K/inqOrM0dtI0cZ9DzXAO9xeymSaQkk85Na2kaDdao/lwW7sf72OBXWQeBDYKHuFErjkgdBUyqQp/E7sqMHJnJad4bvNSx5ER2A8ueldZp/hBbAh5lWZuxPQV1Vk8FtpyR7EQY521Vub4fcjXPvXDXxcm7bHVTpKIj20EEQeVlCgcKKw5WaW42wghela1rpk2oy5L4Ud2NWLWGKw1HZKARj5TjjNcXPqbaGj4Fslh1KSVwCyrjnqK9HUg1wHhyGdNcld2BVgTx0rtlcivmMzvKvfyRajdFwg4puDimpMCalxxXnXaFsMK5GabnHA5qQjtSYwMCnzDRVuIy8bKe4xxXlOveGbuzuZbi3DSREkkdxXrbjvWfPCHzkcGu3B4uVCV1sdNGo4s8WguPmKSZVx2NPlb5wfeu61nwlb3haSICObrkdK4bUNPvNMlKXEZIHRh0NfR0MTSr/C7PsepDEKSsz2TR236XasP+eYrSHasPwxdJdaFasv8AcANbgA618lXXLUkn3PEnuyRX2n1oIDU08kEU7qayuRYieMgdKjKY61cBBGDTXiBHFCY1LuUmHSmsCeKstFUTYGcCrTLTK7xqyEOoKnjBFc1N4VhGsw39ofK8s5Kjoa6tl9absxW9KvOnfle43GL3FiuAflkG01Z7ZHIquUBGCKaGeDocr6Vg0nsJxT2LYOBS9qgSVZFBBwfQ1IpqGrENWF60dMUp4FJQIpX0+wYFYM0zO5rV1U4PWsfHOTXdQiuW520IrluI7YTJNefeO5N0SV3Vw+QRnivPPHDYgQ5717WVwvXTHWlaDOEdhg1WkJ7U/wCaQnaDViG17ydfSvrNI7nkWlUdkU443kbAHFXorYKcHrVlUUDCjFRsj54zipc7m0cOoq71D7NjkCnpAd3SnwNIpwRkVfj2k8jmspSaO2jRhLYgjtx3FWoLXJJA6DNWBDgA0uPLG52AFYudzujQUURlQB6Uz7WkDetVbm/XJCGs2Scu/WrjSctzmrYmEHaJo3upvKNoOF9qynkLE80rHPWozgqRXTTgorQ8+tVlN3bIJPmcelWkAAxVVlKkY9asJG8nsK9PDbaHmT31JRL2HNWrKJmlBJwKijhROgyfWtC0T5s16MKN/jMZS00NWJfLx8uVPerKgYz2pkX+rANOZO6nmupJI5R4UckU4JgZNRq2TtYYNNlulgBDkYHrSY0iaTaAKzby/hhBXq3TFUL7V8kiM/jWI9wXfczEmuWvWjyuO5vTpu92PuG3TswwAfSn2961u3QMPQ1Udizk+tNySa+eaudV7G8NZNwgjIC9qc1vG0irJg99wrAUHsatw3ksQxnI6VHJZ+6Wp30ZcltAQyxL5lZstkU6gq1bNnfRlhhipPX3q7LPbshSe3BLdGHWrVXW0hOndXRzun6jeaVdLLBM8bD+6a9q8GfEm6eJFeUTEfeTOH/Ad68gntvN3bI//rVWWCe0cSxSFGHIwea0cb6xZntufYWj+K7HVUG2QB+hU8EGt9WVxlTkV8g6T42ubSRVuyzMOkqnDj8e/wCNes+GfiZ8qLLMJ4v7y/eH1FRfuP0PZqKyNL8Q2OqRK8MynPvWsCCMimAtFFFABRRRQAUUUjHCk+lACM6oMsQBXP634v07RoWaWdAR71xHj/xxd6fLJZ2SM0oXcSOgFfPuueItS1O5b7VI5OehPSle7sgPUPFvxiluGeGwYgdN1eV3esX2rzl5ZmJPqay1XJ3E5Jr0Pwz4Iiv7ZLu4nBQjO1P60S5YK8wSctjktO0O41Kby4ImdieuOK9A0PwXDZbft53nqUHSuotdPh0xRHBGoUDsKmubj7OhcpvZulcVXFv7OiN4UrbkkZs7CPFoixp0KioJ9Uj8to0XdurIllaQnJwvoKvrZRR6WLhyWkY8AdK4ZVXJGtrGW9jdXGXWNth6elXoLBYbYFIfNue6t0q3NeJc6eirN5LoPu+tVLe4uppRDJGenyyL/Wslo7FptoNUtJktomiUrKT8wQ8CmWu93W31Bdu4ZWQnGKrXmtTQyyR4D7TgEdDWTd39xeSq87HI9O1NJP0K1Ov0Z7WHWlhguHl4PPau0GAOvNeS6Rq8OnarHPJnywcEivTrHULXUYRLbSq6n0PIrwczpSVRTtobQtaxfB9KmSUjHNVge1OzgCvJaG0XlYNSkcVURjipo5OxqGrEONgkBxmqzjNXG+bmoWXFEWOMio0QYHNV7nS7e8gMU8auh9av4yKAO1aqbWqZpzszrXTl02JY7YYiXotaEc24Y6H0pwXNNeIM3ofWiUufWW4m1LcsryuafVISPFhWHHrVmJw4BBrKUbGbjYcTinqcc0088UmcVJIjMWY0wruPFCk7z6U5TzkCnsN6DTFimMuBVs4I96hdeenFNSDmIwnemyKMc1KenyiozHkcnmmmNFK4DuMQ8N61kf2zqWkzEahCJLYn5ZUHI+tdL5YA6VHLbrIhVlDKexFdFKrBaTjdfiW5Jqw22v7e+gEtvIHU+lWQRXL3eiT2jm40yVo2HPl5+U1JZeJlEq22pR/ZZvVj8pqpYbmXNRd1+KM2uxd1XlhWPJIEXmr2u6ja2lt9ollQR44OeteXa340lnDw2a7UPG89a9LLcvr4uyprQ39tGnT1Z0OteILPT0YO4Z+yjqa801jVZNXuMyjbGOgFQyyvM5eVizHuTVcrX3mAySnh43k7yPMrYqU35FmKCFU+Wo3jO7imLlVyDxVmNgx5pV8FUp+8tUd1HE06iUWrESxMBmpkiY1cig8zgVZjsWzxXnyqJbnowoN6ozfJOKkVCF3MQB61ZuHit1PdqwL6+Z+A3HtVQUpmFeUaKuy9JqZXKodwHeqNzqE0/BbiqUbnByeacTzmumNKMWefPF1Jq1xQzHrTlyKRcYpTwM9qsx9RWyRQBxxzSqpc+gqdUC9K6qWFlPV6IznWS2GogyCw4B6VZBDngBR6Co1T1qVFxivWo0lBWijmlJt3Y9FPpV62HIHSq0bN0xkVdgUFgcYrqSMJF+MHFTqQo5qBp0hXLsB9aydQ1kH5LfIxwW9amc1BamSi5PQu32oxwKRkM+Og7VzlzfyzsSzE1BJKXyxJJNQk/LXDVruWnQ6YU1Ec8hI5p0UJkcdh61GABgsfwqSOXLjPCiuWbSjqWtxjja7Drg0wA9as3jwNIDADtxzn1qEDJAFefctiAetSxwvIyooPJwKt2WnyzTI0sb+ST8zAdK6e7bRntxY6dlJlGTJIMZPtUOXYtQ7mPLoC2MCveXKxysMqg5NVfMkt5VDqZE9QKv3NxcwmNL+28wLwHPpWnM0X2KNoJI5NyfcwOD6Ui0uxQgu42YGBB/tKe9WWsoblWkul8sdgo5rM1G3W2ihkRgty3LIvaiC5uHwJCxWi7hsw+LRlLULAJMTDynaqyPPYyrLBIVZecg12MFpHM6hFJUjJzUV9o0Mp/cR8juKI14vSRLoveI3RvHt3YyKZWKyA/fXjP1HevZPC/wATVuIE+1EFD/y0U5A+vpXgOpaSbJVaYYDfdPrVC1vrrT5t9vMygeh61ry9UZ37n2tY6ta38QeGVTn0NXq+VfDXxAntJkDSGA57fcP4dvwr3/wf4mXXLRTuBYdcHIoA6uiiigApCMqR60tFAHlPirSY7HxJHqVzC0lmylJQFzgHoa4XxJ8O7bVEfUNHkSSNhuGw5r6GvLCC9iMcqBgR3rzvWPB99o9w19ocpTnc8J+4/wBRUuOt0I+Zb/TLrTZ2jljYYOMkVuaF4sudMWOFWJQH5ge9erXdlpXikPZ31v8AYdUx9x+A3uD3ry3xN4J1DQ53ZYy0YPBUUXUvdmgUnE9F07xNY6iq5fy5Dxhu9bCo9ygiwAByDXz5HfTwTKS5DKfyr07wx45LiO2vSAmAoYD+dc1TC2Xu7G8al9zprrTcAlGBI6iooLqS2jMUihkPY1pu8LqskThlPbPWorhFumCqgBPpXnyp2+E1uUWk06RHDxPnHABrAuLy5RmRGdI88DNbl1ZtATxketZ9zH5ic9qxvYuLszI3sRkjn1qN2JHHSrhKrlcVVbgnAxmqTNSHy1btVizvr7SJRPaORjqp6GliXB4GTU45+91olJNcrV0JxO38PeM7bU8Q3WIbnpgjg11Stu5zxXis1vuk3Rna45BBrd0XxrPpey31ANJAONw5Irx8VlnN79D7v8ilNrSR6jnApwOBVGx1K11K2We1lDoffkVbJAxXhyi07Pc10exOHwOtSZDiqoPFPDYFQ0Q4kjrgdKAopVkDCngA0ibtDAvFJ0p+CSQKbtA4NAxhTzFII4NR+W0C/uzkelWBnoKRhTUmNSGRTZb5uD6VOcEcVWeINzjmkV3iOG5HrQ0nsHKnsSA5kIqTpxUKTI0zKCM1PwRSegpKwuc01m5xTtuBUTj5xSQh4IK8UhFIBhacPegkb7UmaeVxzUTMFHJprUpainGMEVk6rYWV3CVuUUj17ipbm/EeQv51zeq6o2xsnnFduGpVHNOOh0U6MpM8+1uRJbyeyNxIyQtiMMeAK5ye3eMnI4q5fSF9Unf1NMZ+MHkelfsGBhGNCKtbQ8arfndnczyBjBqIrWgbcMMr+VQtCQa71EwbKpzgDFSRRs2MVI/lxjLGqM98wyqcClKUYLUWrNmSeGziG590noKiOqMV4OBjpXPeYWfJJNWVcEfhXzmNpwlU5krHq4PFVIR5bkl1dvKx54rPc5PNTFSck9Kry8GpgktjGvOUndjoxxmph8wFR26grz61ZWJj0GBWsKcqjtFGd1GN2MCknA5NWI4gpDPg+1CptXAp6gn6V6VDCxhq9WYzqOXoKwBPy8e1KFI5pQnNTquVxXaodzK5Gi5qZYiTToYWY8CrXyQDLkL65rVJIiUggtiT05qW4uYbFSHwz4+6DWTc6yy7kgJAPG7vWS8rM24sSTXNUxKWkRKm3uXru+lunyzcDoKqsTxUayjHTmkY85zXE5uTuzVJIUnJxTWPOBzSjJI7D1obCt8h/GsJ1EtikLgAZc89hSdfb2pVUuwA5JrobTwpcSWguriSO3iPQyHGa5Z1L7lKN9jChh3uqHjPc11Wn6Vp1mFbUQ7KTkMnINQS2EcVoiTIpTPEyUhgvLBVZf8ASLY8jvWDdzVRtubOp6gXjit7S3FvB0WRec/WqE1nAi5ulYu3KzR9Pxp9uzX0Za0QrsGXjPSq8t6htmWJyH6NH1Gfapd0U3csWhZHS21OTdZN91+uKNU+wzhbbS4WREPMrfxVTijJiRrslYavwyC5XyLaIbF/jxUzqv7KCMU3qzPgsH84FwXJ4rYi0h8Bn4HpirtpYGIGTOSvNOvNTihQSzSbNo4B6k1haU5WZt7qJItJeCEzeZtBHSsy88Q2mlwmG1UvN3c9AaxtU8SXd0rJbuUiPXnk1gy3PmJgjc5711QwvWoc863SJYvb2S6lMlzLvz0HpVBY3mk2opwa0NM0O61KQAIdvrXoGleE7ewMfnKZrg/dhQZJ/wABXS2krIw1Zzug+E5J2WWddseMlm4Ar3L4c6Z9lkZ4QfIwADjAOKj8P+CZ7sJLqACQjlYF+6Pr6mvR7OxhsoRHEgUAdqgpFqiiimAUUUUAFIyhxhhkUtFAHKeIvBlnrERYJslHKuvBB9jXBXgvtED2euwNeWB4WcLll+v+Ne0VTvtNt7+Fo5owwI7ik0nuB84+I/h5aajAdQ0R1ljbnCnpXmV1YXmlTGOVGTBr6S1nwbf6JcPe6HIVUnLwH7j/AIdq5e7s9L8Vb7W9hFhqI48t/wCL3B70lKUN9ibPoeZ+HfEr2Fwoldnjxggn+VeoabrGlaqi/ZpNs23lDxivLPEXg+/0K7cGNmjB4ZRxisW21Ca2kBDMjDuDg1NSjCpqtzSNS2571MDtKthlI49qz57BSMxDJx0rl9B8ZRNCI7ogIFxvJ5zXV2t2t5AJLZwyMOorza1JrSR0RaeqOeu7QrIWbP0qs0QbANdZdWsAt/NlkA9u9c69qN5dWJXtXHJOO5vF3RAEEZ4HFP8ALOORin4X8qje5QNtDDNRdvYoZMm1c1B5fmfeAzn0p010Pu4zTFm5/rWiTSALa6vdGn+0WMhHOdh6Gu90HxvaamqQ3hEF10x2NefyM0sZEajjvUAsmYls7W7YrLEYWliF+80fcSbT9090BBUEHIPQ0u7IxXlOheLb3RsW92TPb+rHJWvSNN1W01SETWsyuO4HUV89isFUw711Xc0jNSL4ypFTqxAzUGM807PFcTVymi0pDD3oZD1qsHx3qdJsjmocTNxaHbSKaRUoIIpCvOKkVyEZzSMBzUjL1pCmVp3KTKT2+H3x8NUsdwUISUYPrUp4pGjDjkVfNfcvmvoyXcD06U1uJBVRhJAModw9KfHOJWX19KXL1Fy9UWSecUhPNOIwQaQ81KMwL8VkXk7ZNarcKax7lcls1tRSubUUrmbcPlc1ymrSklua6i5HykCuR1RdrtXtYJe8ejDZnCXEyC9mBPOaVSGOAagmQvfzY65p8ashwa/TsNL91E+ZnbnZdSP5aiu2WG3ZiuW7H0qaObKbcEn2qjqLsICrAg+lbxq9DKUboxZbhnc7jVZj1zT2PFRHrXJKTe4khUxmrURAWqijmpdxC4HWuCurs6aLUdSR2ycA/hUEiHdzTgxU8Dn1pwRmJPXNZrQcrzY61IjlBK7l9DWxHEtwD5HJ64rPhtuM96twCSFtwJHuK6cPjvZPlewPBSmrrca8Tq2CpFKANtXP7RVk2Txhs/xjrSCBW5Rgyn0r2aNWFRXgzhnGUHaaK8aljwKuQW7Z5FORYrZC8hAArMvNVaTKRfKvtWk6kYLUjWWxoXN/BajahBkHTHasK6vZblyzt1qu7kkk0wtnHFefVrymaRikKScUU1ulKoyOelczkWKMk4FSBNoyevpR8qn5eaXJJANYzqdhpDgS+F7V0Gg+E7rW5f3YCxDqx7VgKNvJra0fxJd6U22Jv3bH5l9a5pttaFxS6nYzeALW1iBiusyrzuPSsm/a4O231MM8IwFkQdPfFb2k+I7bUmCyOqMOiN0rTvntpY/KaJcfxE9hXJ7ScXqbJLoc5cw2c2mR2lszNCF6r3NVINNa20qeQ3i/IRiMnk1UuQNP1ZTYOXXOWUdK11it7m58+U7D2TtmqnXjFAoNsr2H225sWWOIRMw2lgMZFJb6Zb2M+11LzdfXJq8944jMEI+UdXA7UsWxW3Z3E9W9PrXM6tSXobKKW5A2j/aD51xkRjouelasUcEMCmJQIl7isrUNSWzQgkkHn2Ncnf6/cyholcxx+gNa06M6iREpxgdhqfie006N4LfbJMw6joK4O8vHumaS4csx6D0qjJLnODub1q5p+k3OoyKqIxBPpXoU6UKa03OWVSUyqgkmfZGCc12Ph/wa87rNdDZHjJJ9K3NF8M2+mbPtEXmTt92MLlia9J0PwZc6kUl1BRFAMFYF6fj60OV9iUrHPaLost0otdKg2x5w1yy/+g+v1r0zw/4OtNLQSSL5kzcs78kmt2w0y3sIVjhjVQB2FXaSVhiKqoMKMCloopgFFFFABRRRQAUUUUAFFFFADXRXXDDIrkfEvgiy1iIuqbJhyrrwQfrXYUUAeGXw1DRCbPXbdr2yPyrcY+ZB/tf41x/iT4fwzxG+0aRZYmG7CnNfSuoaVbajC0c0asCO4rzPV/B1/oE73eit+6Y7pLc/df8AwqHFrWImj5tuYLizdopQy4PSt/w74rutHOxCDG33g3P5V6Pf6NpXivzYzCLHUV6wvwT7j1rzDXvC19odwyujbAeDineM/dkCbiegwavbarEGRyGbqD2qaG5SOMxMgb0NeSQXs8EmVkZT9a63w94mV51hvBweA4HNefWwjWsdUddOsnozeu4pXO8DaPQVlvCRLncd1dYttDMpfcFUngetVm0+OVyqge1cXMo7G/qc7Gh3fN0zxUxKbwCDj09qt3Vk0D4xxnriqrwqT82R70cyYycKEU9hSpnJpY4xsxyeOM0bfm4rO47kEqq+RjoKgtri80y4E1nI6AHJUHgir5Xg5xjFVLieKF8OQM1cXzLlauhNdT0Lw/43tdQ8u2u8Q3J4GehrrMjrkEHuK8Burq38smNiJRypHXNa+geNdV0wCGdWuYPVuorzMTk/Mueh9z/QUatnaR7KcYGKeDkcVkaRrdpqsKNBKGfGWXuK119q8GcHB8slqb6PYkWQgCp0kBPPWq3TFG7bzWTVxONy2fbmgjNQrNjGe9TbwcVDTRnqiNkowcU5jjmj+GncdyFlyKi8kbtwGCO9Whx2pMU1Iak0RbyOG/OpAwK5pGAPFRKCmcflT3DRk78pxWTdAA1pbwVIJwaoToZG4FXT0ZpS0epjzjcSAKyZdFe8Zs/KK6oWqgEnmpEiUdK7YYlw+E6fbW0R5tqPgVUY3FuCX7jNcfqFlPZTFZoyPfFe8NGPwrM1LQ7TU4mWaJSf7wHNe3gOIq1BqNXVHHUoU5razPEo5NjB1NJq8kctnvyN+eldPr/gq508NLagvH1wB0riL9ZY4zHIpB9xX2+DzGjiYc1Nnn1sPOGrMgkdqSOGSZ8Kv41aihjjUNKf+A0k1wXG2IbF9BWNSvd2iONFJXm/kO2wWyHcBI5HboKgRfMbdipIrcnlqtRQ4GMVyynY6I03O2lkRLb55qZIgO1TrGe1PCDOGHNYubOuNFIjXAGB1p67mOKlitmduBxVh2t7JN7kO+PuioctbI2ULK70RGLDcm9sKg6k1Sur+K2ZRacMOretQ3mqzXAK52r6CsqRjnNdeG54yTuefjKsJLlii3PdSTnLMarjNJn5aQZJwK9GUm3qeYhcHHNNA54p4QnrwPWpF+TO3Bz3rKc0hpCJGuNxP4UjgHIqaNCw6cU8wDGRXLKpd6lqJAqHbnHFPVdoyRxUoJXApxG5c4xis+YrlIsZGaVVBNTqA3HSrMdkH6dahzSKUWyrGzod0ZII9DXQW1zcXNoI2c7vXPNVrfTDvO9TgVqW9lIFzGuAO/auepVT0RtCFtWJaxCPgDLH9auKsSkiZsHsKcFNoyvkNx1qO9vYQQ0u2PuCaw9m5M0bstBnn+UxCLhT3JrPvtdhtYzDB88p9+BWRqmtyTfu42Hld2A61iyS7iCBz613U8P1kc063RFye/uZZt00mc1XkLXDhUU1Y03TrnU7hY44yxNd/pHhO10+FXuwzXDH5YlGWb8K6r2VkYb6nO6B4SnvJFeVMJ1Oa9I0HQDKVg0u33N0a4I+UfT1/lXSaD4MutTCPeJ5FqMYhXuP9o969M07SbbToVjhjVcDsKj1GYHh/wAGW+nfv58y3Dcs78k11iIqKFUYAp1FMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKa8ayKVYAinUUAcZ4l8DWuqDz4R5VwvKSJwQa871VbjTlNl4itWuLfot2q8j/AHh/Wvd6z9S0e11KBo5o1bI7ik4p7gfMXiLwEHgN/pLrNARuIU5xXCZn0+Yq6FXHqK+h9X8G6l4dne60VswMcyWx5Vvp6VyepeH9M8VRyPEgs9QX70EnBz7VKk4/FsLbY8+0rxHcwSAvKXXuDXf6RqVrf2+9H+f+7Xmms+Hr7Q7opIjcdwKZp+sy2cyMh2sp/Os6uGhVV46M2p1mtz2BYmuQU2AqOrGqF1pSAl42z61m6T42tjDtuCEkP5Grl94ihESbEDA8kivNnhpXs1ZnUprdFZ18vg8e1Z9xqKW5+Yggds1b+2xamNhIj7DPpWFqtsIw5U7wD1FRGhaVplOWmgt1rPmLiLIJHWsW5uXL7mYlu/NQNM6jGKYDvOeprvp0Yw2OaU2zQ0145ryNZThM85NdZ51kF2qycDpXJW9tld2ORVgwueQcH0rCtTU5bmkLpGyt2bG58+yuCjA5+U9a7Lw98QknmW21FRExOBJ2NcBBbFog2ec0ye2YrkdBXJWwlGuuWpv3LUpR1R7/AB3Mc6B43DKehBqXPy4rwzRPFWp6FKo8xpbYceWxr1TQvFFjrMP7twko6xsea+bxmW1cPrvHubwmpepv9BmnrIeKi3ZWlXpXmtFMthweDTsc1U3YNSLLjvU8pDj2JyKQDigOGFKeKkkYRzTQOaeeme9RMTTQwkAZcVWxjg9KnOajPXkVpEtMYQO1NxinOdqk4qPcGUGrQ0DHsKMimuwQbiQB6muQ8QeNrbTA8UBEsw4+U8Ct6NCpWlywVy0rnR395a2sDPcuqR45LV4x4x1iwv7rbp8Sqq9W9aqa14g1DWZiZ5W2dkB4FYhQmvrMty36s+eb1/Aicna0SqEMj5J5qVLcr2qZYcHNTKrDHGa9iU2ZU6K3ZGkZI96txQ4XNOhhLHpzV6G1Y5yQFHOTWEpnfSpFURsxAVatraRxL5lwwQYzg9TUdzqUFou2EbpB/F2rCur2a6Yszk0owlPyQqteFPzZfutV2K0cAwtZDTPITuJ5pAOOTTenGK6YQjHY82rWnU1kxGqBxk9aseWXIpr27itoNJnLUTtcj5JwKlRdjDK5py27jBAP1qykYK5xyKqdfsZKDZEY2IyenpSrGoxmrODtxmo5EOOetc7m2zTlsIpCnHapvlBJPT0qNEIGTUhVnOMVDKRGAC3FTRws7YAqxbacZXB6Ctq2s0t8MVPPesqlZR2NI029zJGnsD93rVm3gK8ckit2K2aYHYvy92rUgtLSGDjaXxksfWuf2kpI05UjNsbTeAzjgdquzySLGYEhHPoKjnvILJfMkO0D3rBuPFjziRIFMadN2ea2oUZTdkhTnGK1GX2sR2gaKSMtKPyFcxe3Lzt5krE56DNOvL1GY4O5ieSais7C51K4WONScn0rvjTjT23OOU3IqBWdgqAnPauq0HwhPqLK0w2J3zXQ6N4TtbCJJb3mU/djHLMfYV6Rong+61hke4iNtZjpCp5Yf7R/pQ5N7E2Ob0PQcsttpEAdxw1wR8q/T1NeoeHPBFvp+Li5zNcNyzvya6LS9FtdMgWOGJVwOwrSpWGNjjWNQqAACnUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBkkSSqVdQQa4rxN4EttS/0i2zDcrysicEGu4ooA8J1CDy/wDiX+JbXI+6l6Bgf8C9K898T+AZ7Em5siJbc/MCnPFfUuqaJaapA0c0StkdxXmOreFdT8OSNLpw8+yzl7V+Rj/Z9KzcWneIWPnIh4JdkikEHvW3Y6hDHDiZy69h6V32p+GtM8UCWSwU216n37eThgfb1rzTVdDv9FumjniYYPXFWpRmuWQRbi7o7jTGsr+EFMkgcgdaLiyhjDqJMn+5XFafrk1i5MQCsRg1pwas905MrBcHPFYToteaOiFVMsjRHuSTGvTrWdcWT2Up3qRjsa6bT7wDO6QAYyCTWlLpsGpr82WOOXrmlOUfQ05Uzj4ZQVHNP8wKc9TUt3pEtnM+0FkHQ1ReQKcHNCtLVBdrcs/aHLAg4X0qwLoYwSDxVEsCo9KjbAGRnNLkTDmaNMtFIBkcUtrM9rMJIpCjA8EGqdmzSyBADWsliXGH496ynaOjKXvanY6B472lbfUWJydok9B7139vdQ3MIkhkV0PQqa8SbT0WMqDkVZ03X77QJsQyGSEdYyeK8XFZZCr71DR9jVTcfiPZ885p2cgVzeg+LbHWU27vKnHVG4z9K6NTnoa8CrSnSlyzVmaqz1RIrkGphJkDNVjyaUHAxmsmriaLZOajYUxJMdak3Bh1qbWItYiIJFNIA5qcgYqpdXEVtGZJXCqOpNVG70RS1Gzf6o81zuo60mkXUbSuHgkUhkB5U9jWVr3jMYeGwGe281xFzcTXMnmSuzsfU17eDy2Uveq6I6qeGb1kbGv+LLvUFaK2Yxw+g6muNkR2Ys2ST1zWl5ZOahkQdD1r6HD04UY8sFY6HRRnNEB1qNocdKvshPBH40Lbk9s11KdiXRvsUo4ST0q7BaFiAFyatJbJCm+Zgij1qld6uEQx24Cr69zU80pu0RuMKavItSi3sl/fEF/7orFvtVlmJVflX0FVZp2kYlmJNRtjbz1NbQpJavc4a2JlJcsdEMJZu9IPlNG7jAp23dwPxrc4yI5J4p6KA3NPAVGwOSamjtmkkG5SBSckiXZeoxc78KM5qcW7NyauCKOIDpTDMOgFZOo38JLV/iIdm361E/A44qd2B5qHG40ITI0f5venkMeT0p4jGenNaVtp3moCxx9aUpqOoRi2UoLcykccVtQ2ECqCMk1ZtrKOKPHB4qcW7FgEAx61yTrOTsjaMEtWRwW6r90fpWnFaZUtIeB2x1qeySG0UPIu9uvNVbjUwGZ5SscYPGaUaTb1KbsakQhe2MX3cdhWHdX9rp8buz+bIM7VHQVhanr8s+6O2G1TxkVzdxM6thpCxr0aWGsuaa+Ry1K62iaF5qr3dwZ523J2Wsl5XlkPlgjPYVJZ2F1qE4jhQsT6V3+ieEINPRbnUBkk4VOpJ9AO9dLmkrI57t7nOaH4PvNSYSyKVj65Nek6LoiIVtdKthLMOHmK/Kv+JrodD8JXushPNiNrZf8APMdWHuf6V6hpOg2elW6xwxKMDsKz1e47HN+HPA0Nmwur399cEcsw/l6V20USRIFRQAKf0opjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApksSTIVdQQfWn0UAcF4m8AwX7fa7PMF0nKSR8EGuE1ADB07xZbd9sd8i8f8C9K9461k6voFnq1u0c0StkdxUyipbgfLnin4fXGnFrqxImtW+ZXQ54ri45JLNyjp16g19F6l4c1Twuz/Yk+16cxy9q/OP8AdPb6Vx2teEdL8S2zXWkYhul/1tu3DKfpSU3B2kKx5zZanGjfOcqeAPSu407XYvsyomCAMfKOa881PR7vSLgxzxspB7inadd+SfvlTROkqmsTSFW256Hd3ccsG1FxnrnvXN3lkHJIB3nsBW3otzY3UKRzuBOT3PUVpy2MNvchjtMR9TXBZwk01Y6tJI4OOKQnyypyD6Vcj0+RyMrgetdu9pYPGQPKjx0PrWFdEwswX5hjqO1ZSqyvaw1FFeKO3swGOM+pqY6hET8uTWTcs0uSx+gqoSV79KSo82rY3K2xtS3zNlRwKrDk4NZou/nwx59asRF3+ZTkGr9lyk89y99naPEkZKOvII611ug+O57PFvqoLpwFkA6fWuUgMu3ay1YeFHXaQM1y16VOtHlqq5autYns1pf299CstvKrow6g1ZJ4rw6w1G+0Kcy2cpKn+Anj8q9F0DxpZaqqQynybnoVbgH6V89i8sqUffhrE1jUT0e51vb1pN5oVlK8c01sZrzDSw6a4MUDP1wM15PrOu3Op3brJIRGDgKK9Nvj/oM3P8Jrw+9nZbtyOzGvbyahGblJrVHTh1GN2zR8vP5UxoznjpVSHUCcBq0YXWdeOte3JSjuelTUZbFV1YCoRDubJrSaDsTzTXWC3QvM4GO3c01U7A6fVleO23fw8dyar3d5b2X3CHfH5VX1DXGkXyoFCJ3x3rAmlLnk5rppUXLWRx18VGGkCxc30lw5JYkGqTZJ56UBx0phJJ5rsjFLRHk1Kjk7tiuR2pF+bilEZb6VJGoU4A5qjP1GrFjk08xZwBUgidj0q5DEv8Q5rOU7EuXNotiGGz8sbmXmppJQgGOtSPgHrxUDgE4zmsk+Z6itZaDHfd3qPb3qTB3bcCl29Kq9hbjQmetSRwb5QACc+lT29v5sgWtu3to4RwoBPfHNZVKqiUoXIU0+3VAdpzjvVkQYICg5qxb2Ut1LhQAo5JPStBLZLflSrN71ze9Lc10RXs9MeVlMhIU9h3qxqQFmoRU78VMdStbeAtMwjZRxk1xmueJTcOwtyQvTeepropUZSaUUZyqKOrNdtat4eXYF16LmuZ1nVWvpC0nCdgKwppi7liTu+tPt7a5v5ljhVnJ7V6VOnGn01OSpUcxDM7DbHnHatzRPCl5qriRkIj7sa6LRvB8NhGl3qJHXiPHJP0r0bQ/C99rIVBGbSw/uAYZx7+lNzvsZ2Oe0XRY7WUWmlWonuRw0pHyIfr3+lemeHfAqQut5qDGe4Pdu3sB2rpdG8O2WkW6xwxKMDsK2cYqUiiOGCOBAqKAB6VJRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAI5oI50KuoIPrXCeI/AiTy/btOY292nKunB/H1rv6MZoA8E1OKG7Yad4nsxHcH5UvFXCMff0rzvxL4EudKZp7fEtueVZORX1NrPhyy1i3eOaJWyMcivMdQ8Oan4WeQW8RvdMc/PbPyQP9k1HK4/CJo+formezk7gj1rZsdbm2HzZGk9MngV3GteDtN8Q2jXmjMFmH37duHQ+4rzS+0290e4ZJUZcHuKpSjU0kCk47HWW8730hMbcDB25q/bxuZNjjAbrnrXB2OqS21yJFfa1dnY61BfQ+Ww8qTpv9a5qtFr0OmFVS33JL/SQozG4L/wB0Vz8qOhKsMV0bwv8AI6sXQ8bqluLKBgN6AqR1xzXNrHY1epyBtWY5CGtKxKxqA3Udq1GslRcp8y+1ZF7E0OW6elT7T2nuhy8upr+YuBg9aqzXI3YB6VmQXUzR4z7ZprxSt8xzSVKz1Hz3WhofagwC96DEGberEOOQVPeswMQOc1ZhudnQ03C2wr33Ou0HxpeaUFt73MsHTeeor0iw1S11K2We3kDIRnryK8RZxKmWxk1JY6jeaRP5tpKQO69jXl4rLIV/ehpL8GaxqOO+qPbNQbGnzHP8Brwm8b/S5R/tV6JY+NrTU9Pliu2ENwEPB6GvPropNMzp69qWU0KlBzjUVjuotSjeJWBwauWN95JINUn4qEMQSa9mUVJWZvGo4SujbuNVMcfyD5j1JrAubyWZzucmrEzbohzWeRzVUqcYmOJrSk7XGsxHNQ43HrU5xnpmmhMOMjrXQjhkrkaId9TrCGfA5qytmAN0h2D0pYrf5iTwvak5JasxcktIkYiyuF5PrVmKzEfzMATUoCqox/Khnx0OawlNvYVtbsbjDYFIxx9w80pO4c1E6c5HWkgY5W3DmgqD0FOVTjHepY1x160XsCVyu0fIOackR3ZPNaS2Kvg5q7a6T52Ag/E1n7VbIpQEsbaPy1IQ7jWstixKhxj2qayjhtNyuu5h6etE+oQQfvZn2gdjWcaV3dlXsh0iTW8YwMr7Vh6p4igsGZcbpOnB6Vlat4snklMUGVj6Vzl5MHQliDI3WvRpYRP3pnNOvbSJZvb+S6kEksp2n+GsySbcxCDg0sFvPduEjVmJ9K7vQPBaQIl7qjBIxztPeurmUVZHM7t3ZzWi+GLvVZA2wrFnljXpekaHBYvHa6ZbLc3eMO2PlQ+5/pXQaL4bu9XCxW0LWdhnrjDuP6CvUND8MWWj26pFEoIHXFZ7jSOY8O+Awsi3upHzp+oyOF9gO1d/Bbx28YSNQAPSpQABgUUxhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVFPbx3CFJFBB9alooA878R+Ag05v8ASnNtdryHTv7H1FcNf2trqLf2f4ktxbXhOEuQMI/+Br30gEYNYWueGbHWbd45oVOR3FS4pgfLHijwJeaPIZoV8y3PRl5FcxBcyW0mHB47GvoLVdF1bw0jQ+Ub/Ss8wvyyD2NcTq/g7TdetZLzRnAmXl4W4ZT6YpKbjpIRylhr0u9c8xDqpNdMkzXtiWiUsfQV59d6fd6VcGKaNlKnnIrQ0/WJIY9iSsvtng1NShGavHc1hVa0Z21pOLdDFIu3dwfeq17pbXqO0YyFrMi143xWFlCgfxetb1rIyOFDltwGQO1cVWnyu70Z0xldaGDHZCD5GTDDtS3ClUPHWuoltYp8kD5z3FYl/Y3Ebcg7e3Fc6k76l9NDBdSvXGDURBB46VbeIhiDUJjIbmuhMzaHwuCQCatBAQMkGqawuenA9TUwLRpkN0qZLXQa2EuLVT3x+NVE325xnK1aNxvyGNMKq0ZzVxbtaRUZOD5oEZdXY4NJgFTUEkTqcr2pbW4w2yUfjWjjpdHbRxMZu0tGPc/IBiqxQs3HStG4jGQF7+lRm2IG4nv90dacNVcWIcYOzZXjti2cY471YECN8qLk92qxJB5jrhdiYxgVeijVI+KidZJe6cT5pvXYqx2WVBclj6mhrba2Qau7iM5/CjYW5Gc1zuo+o+VFBkUcHrUZUAg1eliwvPeq8iFAMjmqUriaItmG9jSNFzUoBfBI5p6ws796fNYLFdYWZsZ/GrMVsSwB5q/HZlgAo/GtGGCK3Tc2S49qjn5irJC6fpyg5mGz0zW3HHCsWcDA9Kw59XgjbNyzKB6VzWpeJpJZDb2bssbcE561tSoSm9CJ1FHc3tU1q1sXk8tQ8nIAz3rh9Q1e5u7jfMduOgHSobi42Ftz7mzVSOOe8kCopYk8ACvRhRhS82ck6rmOnuPMUIi855Naei+GbzWJRhSsfdmrpNB8GRQqt1qbqi4ztavQtE8PXur7YbSE2lkP48YZx7en86cptmdjn9G0K20t1tbG3+2Xp6n+Ffqa9L8PeBXkkS81VvNlHKrjCr9BXTaD4UstGgVUiG7uSOSa6EAAYAwKm3cohtrWK1jCRoAB6VPRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIbi1iuYykiBgfWvPPEfgAi4Oo6Q5t7teQyd/YjuK9JpCARgjigD5/wBRt7fVmOn69apaX3RJ+iSn69q868R+C7zSGaSNd8PZl5FfU2veFbHWrd0lhUkj0rzLUNG1LwwHt5oWv9KJ5QjLoPY96z5XHWIrHz+tzJE20kitbT/EMttcLzuTocnrXca/4IsdWtWvtEcOOpTuvsRXmN7ptxp85jmQqQapuNRWY1Jxeh6xp17a3UKyRzI74yUB6UurmUpuyAuPyryzT76SzlDJIy/SuiPiGXUI1hbKqOp9a4KmEcXpsdUKqe+5JMAcspJbuKgEyLgtV6OAvGrRAMv8XNVLy3WVsBQg/hApqFx8xE9wpYbOlRPKzZxwPSoDHJbSbJAadv3dqfKlsJO4IcvitCCDeBms5VfzcmtezSQgHB9qmo7IqKGvbKEIA5qlJajpjmtrYdpJ6+1VZIPnznrWUKljRxuUo1dMHPI6GrdsqKSTyT1JqMqQcHmnxjacHoauc3JWElrdlpyhI4xSK2O2fek4KjNKDs+lYWKHZ6+n0pFPcGkV854oJxjmgBx5GW5NQyqGbNPyew4q5ZWEl3KAM49aewFeKPeAiJk1pW+nnIEhA/pU4g+xSjYhBHrUlzdBIvOuGCIKnVvQLiND5TjaQAD1qprWuWljb7AqmY+/eub1bxNM4eO0+WP++eprlpZmnJeRyzepNd1HCdZnNOvbRGhqV7c3b+ZLICOwHSs95ycbBikijluGEcalifSu20DwWAn2rU2EcQG7BNd91FWWhzO71Zzuj+H7zWJ1VVIQnliK9E0nQLXTSttbW/2q+P8ACvRfqe1dDofh+61QLb6dA1tZ55mIwzj29K9S8PeELHRYF2xgv1LHkk1Duwscv4e8ByTyJeas3mOOVTHyp9BXo1rZw2kYSJAoHoKnChRgDApaYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubSG6jKSoGB9anooA801/wLLa3D6ho0hgn6sAPlf2I71w2oadp+tTfYtVtvsN/j7x+459jX0GQGGCM1zniDwlY61bsskS7uxxyDUyjcLHyz4j8F3ujStIELQ54IFc6txLH8hG09M19BX+nahoG+11OF9Q0tujHl4/8AEVw/iLwJBewNf6LIksR5IXqPakptaSJ1Rxek3E6yiMygRnqx6Vuvd28IKoQ5P8WP5Vx11a3VhKY5VdCOtLa3JV+WJHoTSlSUtUawqW0Z0MUf2m6JlfCnnmprnTGC+bbruUnoKr6ffxOR5igMemelbMUN0+0hisLc4HcVzyi7m0WrGJFCfN+fgitaCXCYA6VbexjbIZMY/iFVZYRbkAsCvqK5amu5tFWLAfKj6elVJziQdcGla4G0FSOKQMJAT+VZpWKuNKk9uKjljZeRn8qtQD+8R9KsGENHnihzswsZkQcY64PQ1OQQvrmlMZViDUgMYjGSMim2nqgSGKmAN2aUKzNhVzz6VYit3ueFGB6mtGC1WAhVG6T9aai92DKsNhgKZSVz0GK0YW+yODEMqO5ouEFvbmaaRcKM4zXK6l4iF1E1tagof4mz/KtaVGU3aJnKoorU3b/xHZW+/wC0OJJscADpXC6trE19LnzMRk52g1TvJ4ywH3mx8x96qRxSTyBEUsx6ACvRpUo09tzknUctBXndl2DkVqaJ4cvNYnCxqQnUsa6HQPBHmRfbNSYQwjn5uK7/AETQ7nUitvpMDW1r0acjlvp/jVSl0RFjn9I0C00phBDF9qvSeEUZx9T2r0vw/wCBZ7147rVcEDlYVGFX/Guo8OeDLLRoQfLDSnlmbkk+5rqlUIMKMClbqxlazsILKIRxIFA9BVqiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVruygvIikqBgfUV53rfgm506d77RZPKcnLxYyj/UV6bSMoYYIyKTV9wPn/VdI07xKHtrm3+w6oo+43Cuf9k968t1/wAJX+iSnfGSmeoFfVniHwfZazCSYwsg5VhwQfUGvPdSsbvTA1nrcBurI8LcBctH9fX61FnD4RWPnlJ2WRQxPy10ul67LCmJHLx/3TXQ+J/h5iH7fpbpNA3IKHNeeSw3FjIUkUqRxzWl4VFZjjJxeh6db61bX1qoEa70/hH9aiuIEuxiNAm7ksa4LTLwwT71fHqDXYaZr9td4gm+Ujpjua5KlGUdtjphVUl5kEuntGjcjcP4c1Wh83zNmO9dFHpzXe50kCDuTTv7PiifZGQW9T3rlqtR2NkZMcZBBJ5qypBXaeKS8RrY7SPm9fSqcQnll+RScck44rnUXPUpuxoeWGbaF3VHHpeHLTNgjoM1rac0Cxnco3f3jTpIIo0aWZh5YGRW1KDiyXIqWxYEheAM8jpTf7asrFnEjGSXHCj/ABrD1bxKrB4LJRGnQsK5O5uWE29W5PvXfTwjvzVNjCdfS0TZ1XW5r+UszlY+gT0rAmuBuwmc+tMUTXcuxFLE9AK6/QfA8k6i5vT5ca8kNxXW5RirLY5r3epz2l6Be6vOFhjOD1JHFeh6R4estG2IIzc37cqijOPr6V0GjaTc35W10eERwYw1xt6/7v8AjXp/hvwRZ6RGJHTfM3LO3JJrO7YWOW0DwNd6nIl1rB+UcrAvCr/jXptjptvYQrHDGFAHYVaRFRcKMCnU7DCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqreafBexGOVAwI7irVFAHmer+Eb3SJHudIb90xzJbN9x/wDA+9cVq3hzSvEqSRrGLPURnMEnBz7eor6AZQ4wwyK5bxB4OtNVTzEXy515V04IPsalwT1QHyhrnhq+0Sd0eJtqnggVm2195EisyfMvQ19CalZvbA2HiG282A8LeqvI/wB4f1rzvxX8OZLVPtun4ltnG4MnINEalnaROxh2Pih3CxuhJHRs9K2odUjnkGxvm7kGvPnSexmwykEHoalgvpI5d6sRz0qZ4eMtUbwrNaM9BeeN32TOSncipEuf3jR27DyumDxWBo2oRXeRLkFfyo1TV4/LeO1AVgfvDrXMqMm7RRq6kbXNPUtUi06LcxBlJwFBrldQ16+uAQ8hEZ52g1nPcs7lpmLnsc1ATJcy4ClieABXXToxprzOedVyEe5LNuHBNXtJ0i71a4CRITnvXRaB4Ie5jF1f/uoRzzXe6RpUt5ItroVsEiA2tclf5etU59ERYyNJ0HT9B2B4jc3zdI05P/1q9B0PwVeaxIk+pjy7cHK26/dH19a6bwz4EtNLUTTL5tw3LO/JJrtEjWNQqgACpS6sZS07SrbToVjhjVcDsKv0UVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBTvtNt7+Fo5o1YEdxXA6h4avtBeSXTVE9o+fMtJPun3Hoa9KprorrhhkUmk9wPn7XPCOmeJIJpbBPIvIxl7aQYZT/Ue9eQ6roV5pVwySxNhT1xX1rr3g63vyLi2zDcpykicEGuC1nTI52+yeILdY3+6l6owp/wB4dvr0+lTrH0Jt2Pnu0u5IJSwYqCO1E10WBAOSe9dj4q8C3GmTNJAN8R5Vl5BFUfD/AIMuNQPnXIMcCnknitFNWA5/TdJu9TuFjhjJBPJ9K9K0fw1Y6GqPcr510w+WMDLE+wrb0bSvmFnodsHPR7gr8o+nrXpfhrwHb2BFzd5muW5Z35NS25DscroXgu+1t1m1IeVa5ytuvTHv616lpmjWumQLHDEq4HYVfjiSJAqKABT6aVhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVR1DSrbUYWjmjVgR3FXqKAPMtR8J32msyWYFxZtnNvJyF/3T2rO0/wRqGpThLwCCzB/1Mf8X1NeukA9QDQFUdABS5Ve4GXpOhWelQLHDEq4HYVq0UUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z\"}]}"},{"id":3100,"title":"Rumis Scorer 2","description":"\u003chttp://en.wikipedia.org/wiki/Rumis Rumis\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\r\n\r\nFor this problem, you will be provided a completed rectangular board where there are anywhere from two to six players. The players' colors will be selected from the following options, though not necessarily in this order: red (r), orange (o), yellow (y), green (g), blue (b), and purple (p). The board will be from two to six levels high and completely filled. It will also be a character array wherein the players' squares are represented by a single character per square. In line with the game's rules, all players' colors will be represented on the first level. See the test suite for examples.\r\n\r\nWrite a function to count the squares visible when viewed from above to determine who won each round.\r\n\r\n\u003c\u003chttp://www.exodusbooks.com/Samples/Games/RumisCoricanchaBig.jpg\u003e\u003e","description_html":"\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Rumis\"\u003eRumis\u003c/a\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\u003c/p\u003e\u003cp\u003eFor this problem, you will be provided a completed rectangular board where there are anywhere from two to six players. The players' colors will be selected from the following options, though not necessarily in this order: red (r), orange (o), yellow (y), green (g), blue (b), and purple (p). The board will be from two to six levels high and completely filled. It will also be a character array wherein the players' squares are represented by a single character per square. In line with the game's rules, all players' colors will be represented on the first level. See the test suite for examples.\u003c/p\u003e\u003cp\u003eWrite a function to count the squares visible when viewed from above to determine who won each round.\u003c/p\u003e\u003cimg src = \"http://www.exodusbooks.com/Samples/Games/RumisCoricanchaBig.jpg\"\u003e","function_template":"function [winner] = rumis_scorer2(board)\r\n\r\nwinner = 'r';\r\n\r\nend\r\n","test_suite":"%%\r\nclear board\r\nboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\nboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n%blue wins 22 to 20\r\nassert(isequal(rumis_scorer2(board),'b'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['ppbrpbr';'rbrpbrb';'bbrbbrb';'rbrrppr';'bbrpbbr';'bbprrbr'];\r\nboard(:,:,2) = ['brbpbrb';'rrpbbpr';'pprbrbr';'brprbrr';'rbrrpbr';'brppbbr'];\r\n%red wins 18 to 15 (b) to 9 (p)\r\nassert(isequal(rumis_scorer2(board),'r'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['brbrb';'rrrbb';'bggob';'ggoro';'bbrbr'];\r\nboard(:,:,2) = ['bobrb';'roggr';'bogor';'bgoor';'rgrrr'];\r\nboard(:,:,3) = ['bobrg';'rrbgr';'rooor';'brbrg';'rgrrr'];\r\nboard(:,:,4) = ['borbg';'rrbbr';'bbrbr';'bboog';'rgrog'];\r\nboard(:,:,5) = ['robbr';'bbror';'borbr';'rrobb';'boobg'];\r\n%blue wins 10 to 8 (r) to 6 (o) to 1 (g)\r\nassert(isequal(rumis_scorer2(board),'b'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['rrbrryr';'rbrrryb';'brrrbyb';'rbrbyyr';'rbrbryr';'brrrybr'];\r\nboard(:,:,2) = ['brbybrb';'rbybbbr';'bbrbrbr';'brbryrr';'rbrrbbr';'brbbybr'];\r\nboard(:,:,3) = ['byyybry';'ybbbyyr';'bbrbyyr';'brbyyrr';'rbyyybr';'brybybr'];\r\n%yellow wins 16 to 15 (b) to 11 (r)\r\nassert(isequal(rumis_scorer2(board),'y'))\r\n\r\n%%\r\nclear board\r\nboard(:,:,1) = ['prbrby';'pprbby';'bggoyb';'gpyoro';'bppbyr'];\r\nboard(:,:,2) = ['pobrby';'rogygr';'bogoyr';'bgyoor';'rgyyyr'];\r\nboard(:,:,3) = ['ppbrgy';'rpybgr';'roooyr';'brybrg';'rgryrr'];\r\nboard(:,:,4) = ['borbgy';'rpbybr';'bbrbry';'bbyoog';'rgrpog'];\r\nboard(:,:,5) = ['robbry';'bprory';'borbry';'rroybb';'booybg'];\r\nboard(:,:,6) = ['oobyry';'bpryor';'bopbyr';'rooppb';'boobyg'];\r\n%orange wins 8 to 7 (b) to 5 (r,y) to 4 (p) to 1 (g)\r\nassert(isequal(rumis_scorer2(board),'o'))\r\n\r\n%% anti-cheating case\r\nind = randi(5);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'b'))\r\n\tcase 2\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['ppbrpbr';'rbrpbrb';'bbrbbrb';'rbrrppr';'bbrpbbr';'bbprrbr'];\r\n\t\tboard(:,:,2) = ['brbpbrb';'rrpbbpr';'pprbrbr';'brprbrr';'rbrrpbr';'brppbbr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'r'))\r\n\tcase 3\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brbrb';'rrrbb';'bggob';'ggoro';'bbrbr'];\r\n\t\tboard(:,:,2) = ['bobrb';'roggr';'bogor';'bgoor';'rgrrr'];\r\n\t\tboard(:,:,3) = ['bobrg';'rrbgr';'rooor';'brbrg';'rgrrr'];\r\n\t\tboard(:,:,4) = ['borbg';'rrbbr';'bbrbr';'bboog';'rgrog'];\r\n\t\tboard(:,:,5) = ['robbr';'bbror';'borbr';'rrobb';'boobg'];\r\n\t\tassert(isequal(rumis_scorer2(board),'b'))\r\n\tcase 4\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrryr';'rbrrryb';'brrrbyb';'rbrbyyr';'rbrbryr';'brrrybr'];\r\n\t\tboard(:,:,2) = ['brbybrb';'rbybbbr';'bbrbrbr';'brbryrr';'rbrrbbr';'brbbybr'];\r\n\t\tboard(:,:,3) = ['byyybry';'ybbbyyr';'bbrbyyr';'brbyyrr';'rbyyybr';'brybybr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'y'))\r\n\tcase 5\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['prbrby';'pprbby';'bggoyb';'gpyoro';'bppbyr'];\r\n\t\tboard(:,:,2) = ['pobrby';'rogygr';'bogoyr';'bgyoor';'rgyyyr'];\r\n\t\tboard(:,:,3) = ['ppbrgy';'rpybgr';'roooyr';'brybrg';'rgryrr'];\r\n\t\tboard(:,:,4) = ['borbgy';'rpbybr';'bbrbry';'bbyoog';'rgrpog'];\r\n\t\tboard(:,:,5) = ['robbry';'bprory';'borbry';'rroybb';'booybg'];\r\n\t\tboard(:,:,6) = ['oobyry';'bpryor';'bopbyr';'rooppb';'boobyg'];\r\n\t\tassert(isequal(rumis_scorer2(board),'o'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(5);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'b'))\r\n\tcase 2\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['ppbrpbr';'rbrpbrb';'bbrbbrb';'rbrrppr';'bbrpbbr';'bbprrbr'];\r\n\t\tboard(:,:,2) = ['brbpbrb';'rrpbbpr';'pprbrbr';'brprbrr';'rbrrpbr';'brppbbr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'r'))\r\n\tcase 3\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brbrb';'rrrbb';'bggob';'ggoro';'bbrbr'];\r\n\t\tboard(:,:,2) = ['bobrb';'roggr';'bogor';'bgoor';'rgrrr'];\r\n\t\tboard(:,:,3) = ['bobrg';'rrbgr';'rooor';'brbrg';'rgrrr'];\r\n\t\tboard(:,:,4) = ['borbg';'rrbbr';'bbrbr';'bboog';'rgrog'];\r\n\t\tboard(:,:,5) = ['robbr';'bbror';'borbr';'rrobb';'boobg'];\r\n\t\tassert(isequal(rumis_scorer2(board),'b'))\r\n\tcase 4\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrryr';'rbrrryb';'brrrbyb';'rbrbyyr';'rbrbryr';'brrrybr'];\r\n\t\tboard(:,:,2) = ['brbybrb';'rbybbbr';'bbrbrbr';'brbryrr';'rbrrbbr';'brbbybr'];\r\n\t\tboard(:,:,3) = ['byyybry';'ybbbyyr';'bbrbyyr';'brbyyrr';'rbyyybr';'brybybr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'y'))\r\n\tcase 5\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['prbrby';'pprbby';'bggoyb';'gpyoro';'bppbyr'];\r\n\t\tboard(:,:,2) = ['pobrby';'rogygr';'bogoyr';'bgyoor';'rgyyyr'];\r\n\t\tboard(:,:,3) = ['ppbrgy';'rpybgr';'roooyr';'brybrg';'rgryrr'];\r\n\t\tboard(:,:,4) = ['borbgy';'rpbybr';'bbrbry';'bbyoog';'rgrpog'];\r\n\t\tboard(:,:,5) = ['robbry';'bprory';'borbry';'rroybb';'booybg'];\r\n\t\tboard(:,:,6) = ['oobyry';'bpryor';'bopbyr';'rooppb';'boobyg'];\r\n\t\tassert(isequal(rumis_scorer2(board),'o'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(5);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrbbr';'rbrbbrb';'bbrbbrb';'rbrrrbr';'bbrbbbr';'bbbrrbr'];\r\n\t\tboard(:,:,2) = ['brbbbrb';'rrrbbbr';'bbrbrbr';'brbrbrr';'rbrrrbr';'brbbbbr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'b'))\r\n\tcase 2\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['ppbrpbr';'rbrpbrb';'bbrbbrb';'rbrrppr';'bbrpbbr';'bbprrbr'];\r\n\t\tboard(:,:,2) = ['brbpbrb';'rrpbbpr';'pprbrbr';'brprbrr';'rbrrpbr';'brppbbr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'r'))\r\n\tcase 3\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['brbrb';'rrrbb';'bggob';'ggoro';'bbrbr'];\r\n\t\tboard(:,:,2) = ['bobrb';'roggr';'bogor';'bgoor';'rgrrr'];\r\n\t\tboard(:,:,3) = ['bobrg';'rrbgr';'rooor';'brbrg';'rgrrr'];\r\n\t\tboard(:,:,4) = ['borbg';'rrbbr';'bbrbr';'bboog';'rgrog'];\r\n\t\tboard(:,:,5) = ['robbr';'bbror';'borbr';'rrobb';'boobg'];\r\n\t\tassert(isequal(rumis_scorer2(board),'b'))\r\n\tcase 4\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['rrbrryr';'rbrrryb';'brrrbyb';'rbrbyyr';'rbrbryr';'brrrybr'];\r\n\t\tboard(:,:,2) = ['brbybrb';'rbybbbr';'bbrbrbr';'brbryrr';'rbrrbbr';'brbbybr'];\r\n\t\tboard(:,:,3) = ['byyybry';'ybbbyyr';'bbrbyyr';'brbyyrr';'rbyyybr';'brybybr'];\r\n\t\tassert(isequal(rumis_scorer2(board),'y'))\r\n\tcase 5\r\n\t\tclear board\r\n\t\tboard(:,:,1) = ['prbrby';'pprbby';'bggoyb';'gpyoro';'bppbyr'];\r\n\t\tboard(:,:,2) = ['pobrby';'rogygr';'bogoyr';'bgyoor';'rgyyyr'];\r\n\t\tboard(:,:,3) = ['ppbrgy';'rpybgr';'roooyr';'brybrg';'rgryrr'];\r\n\t\tboard(:,:,4) = ['borbgy';'rpbybr';'bbrbry';'bbyoog';'rgrpog'];\r\n\t\tboard(:,:,5) = ['robbry';'bprory';'borbry';'rroybb';'booybg'];\r\n\t\tboard(:,:,6) = ['oobyry';'bpryor';'bopbyr';'rooppb';'boobyg'];\r\n\t\tassert(isequal(rumis_scorer2(board),'o'))\r\nend","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":26769,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":36,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-03-21T01:22:06.000Z","updated_at":"2026-03-24T06:57:20.000Z","published_at":"2015-03-21T01:22:06.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Rumis\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRumis\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this problem, you will be provided a completed rectangular board where there are anywhere from two to six players. The players' colors will be selected from the following options, though not necessarily in this order: red (r), orange (o), yellow (y), green (g), blue (b), and purple (p). The board will be from two to six levels high and completely filled. It will also be a character array wherein the players' squares are represented by a single character per square. In line with the game's rules, all players' colors will be represented on the first level. See the test suite for examples.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function to count the squares visible when viewed from above to determine who won each round.\u003c/w:t\u003e\u003c/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\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGuAosDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKCQOtABSEhRknArO1HW7PTYmeaVRgdzXlHiv4uRx74dPO9uRuzwPxpNpAepal4isNNUmaZBj1NVNN8Y6VqbYhuY29wwNfKWs+Lr/Vp2aedpOfu5+UVQstev9OnE0UrIc5ytGvYVz7cSRJFBVgQadXzx4Q+MMsTJBqByP74r2nRfFWn6xArwzodw7Gi4zeopFYMMg5FLTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqvc3sFqhaVwoHqa888VfFLT9JV4oZA8vZVOTQB397qdtYxl5pVXHqa8x8WfFq0sQ8Nm3myjjCnpXkXiP4i3+syOpnZEJ4RD/WuPklnumyScUld7CbOg8QeOdS1mZvOnOw/wKeK5zzJ7p8Mx+lbui+ErvVXTy0wjdWau6s/C+kaTCBNiS4HUnpQ2ouy1Y1BvVnDaP4QvNSIcp5Uf95u9aGp+DpbeBngPm7RyMV2kepxROF24jHpVhb2CRvlX5TXPVqYijK842Rd6KW54pJbz202NpRhWvo3im+0acNFK64PY8V6FqPh621UNsjAb+8OtcVq/hObT0ZwvmgddvatYVadVdmS4NarVHq/hH4wRybIL9tp/vZ4r1zTNdstTiV4ZlOfQ18VCKWBt8eVx2roNA8b6los6lJ2CDqpPFW01uTc+yQQRkUV5F4R+LlnfhILxxHL0+Y9a9QstTtr6MPDKrA+hpjLtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUySVIlLOwA965TxF480zRIWLzruHbNAHUzXEUCFpHAA9a4fxP8SdM0SJh5ymTsoOSa8i8VfFe71AvHay+VH655NeYXOoXF9OztIzs3VmOTSTvsK53Pir4p6nq8jxwOYYT6H5j/hXCPPc3rkncSeSSasadol3qU6pBGzlu+OK7zSvA62IV7+RW4yYwaUpRh8W41FyOO0vw9dX8qpFCSSeWPSv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PIvIxl7aQYZT/Ue9eQ6roV5pVwySxNhT1xX1rr3g63vyLi2zDcpykicEGuC1nTI52+yeILdY3+6l6owp/wB4dvr0+lTrH0Jt2Pnu0u5IJSwYqCO1E10WBAOSe9dj4q8C3GmTNJAN8R5Vl5BFUfD/AIMuNQPnXIMcCnknitFNWA5/TdJu9TuFjhjJBPJ9K9K0fw1Y6GqPcr510w+WMDLE+wrb0bSvmFnodsHPR7gr8o+nrXpfhrwHb2BFzd5muW5Z35NS25DscroXgu+1t1m1IeVa5ytuvTHv616lpmjWumQLHDEq4HYVfjiSJAqKABT6aVhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVR1DSrbUYWjmjVgR3FXqKAPMtR8J32msyWYFxZtnNvJyF/3T2rO0/wRqGpThLwCCzB/1Mf8X1NeukA9QDQFUdABS5Ve4GXpOhWelQLHDEq4HYVq0UUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z\"}]}"},{"id":3101,"title":"Rumis Scorer 3","description":"\u003chttp://en.wikipedia.org/wiki/Rumis Rumis\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\r\n\r\nFor this problem, you will be provided a completed board of varying shapes with anywhere from two to six players, inclusive. The players' colors will be selected from the following options, though not necessarily in this order: red (r), orange (o), yellow (y), green (g), blue (b), and purple (p). The character-array board will contain various stencils and maximum heights for each square. As an example, the following board represents an L with maximum heights varying from one to four depending upon location (zeros represent non-playable area):\r\n\r\n  1 2 3 4 4 4 4 4\r\n  1 2 3 4 4 4 4 4\r\n  1 2 3 4 4 4 4 4\r\n  1 2 3 4 4 4 4 4\r\n  0 0 0 0 3 3 3 3\r\n  0 0 0 0 2 2 2 2\r\n  0 0 0 0 1 1 1 1\r\n\r\nFor this problem, the board will be completely filled in, and, in line with the game's rules, all players' colors will be represented on the first level. Write a function to count the squares visible when viewed from above to determine who won each round. See the test suite for additional examples (including test case 2, which represents the completed board shown below).\r\n\r\n\u003c\u003chttp://www.exodusbooks.com/Samples/Games/RumisCoricanchaBig.jpg\u003e\u003e","description_html":"\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Rumis\"\u003eRumis\u003c/a\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\u003c/p\u003e\u003cp\u003eFor this problem, you will be provided a completed board of varying shapes with anywhere from two to six players, inclusive. The players' colors will be selected from the following options, though not necessarily in this order: red (r), orange (o), yellow (y), green (g), blue (b), and purple (p). The character-array board will contain various stencils and maximum heights for each square. As an example, the following board represents an L with maximum heights varying from one to four depending upon location (zeros represent non-playable area):\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003e1 2 3 4 4 4 4 4\r\n1 2 3 4 4 4 4 4\r\n1 2 3 4 4 4 4 4\r\n1 2 3 4 4 4 4 4\r\n0 0 0 0 3 3 3 3\r\n0 0 0 0 2 2 2 2\r\n0 0 0 0 1 1 1 1\r\n\u003c/pre\u003e\u003cp\u003eFor this problem, the board will be completely filled in, and, in line with the game's rules, all players' colors will be represented on the first level. Write a function to count the squares visible when viewed from above to determine who won each round. See the test suite for additional examples (including test case 2, which represents the completed board shown below).\u003c/p\u003e\u003cimg src = \"http://www.exodusbooks.com/Samples/Games/RumisCoricanchaBig.jpg\"\u003e","function_template":"function [winner] = rumis_scorer3(board,stencil)\r\n\r\nwinner = '';\r\n\r\nend\r\n","test_suite":"%%\r\nclear board stencil\r\nstencil = [\r\n\t1 2 3 4 4 4 4 4;\r\n\t1 2 3 4 4 4 4 4;\r\n\t1 2 3 4 4 4 4 4;\r\n\t1 2 3 4 4 4 4 4;\r\n\t0 0 0 0 3 3 3 3;\r\n\t0 0 0 0 2 2 2 2;\r\n\t0 0 0 0 1 1 1 1;\r\n\t];\r\nboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\nboard(:,:,2) = [' rbrbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brbr';'        '];\r\nboard(:,:,3) = ['  brbbrb';'  rbbbbr';'  rbbrbr';'  bbrrrr';'    bbbr';'        ';'        '];\r\nboard(:,:,4) = ['   rbbrb';'   rbbbr';'   brrbr';'   rbrbr';'        ';'        ';'        '];\r\n%blue wins 23 to 21\r\nassert(isequal(rumis_scorer3(board,stencil),'b'))\r\n\r\n%% board shown above with two squares filled in (corners of 2nd and 4th levels)\r\nclear board stencil\r\nstencil = [\r\n\t1 1 1 1 1 1 1 1;\r\n\t1 2 2 2 2 2 2 1;\r\n\t1 2 3 3 3 3 2 1;\r\n\t1 2 3 4 4 3 2 1;\r\n\t1 2 3 4 4 3 2 1;\r\n\t1 2 3 3 3 3 2 1;\r\n\t1 2 2 2 2 2 2 1;\r\n\t1 1 1 1 1 1 1 1;\r\n\t];\r\nboard(:,:,1) = ['yyyyyyyr';'yyyyyyyr';'yyyyyrrr';'yyyyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yrrrgggb'];\r\nboard(:,:,2) = ['        ';' ryyyyb ';' ryyybb ';' rrygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\nboard(:,:,3) = ['        ';'        ';'  ggyy  ';'  gbyr  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\nboard(:,:,4) = ['        ';'        ';'        ';'   by   ';'   bb   ';'        ';'        ';'        '];\r\n%yellow wins 22 to 18 (r) to 14 (g) to 10 (b)\r\nassert(isequal(rumis_scorer3(board,stencil),'y'))\r\n\r\n%%\r\nclear board stencil\r\nstencil = [\r\n\t0 0 0 0 1 0 0 0 0;\r\n\t0 0 0 1 2 1 0 0 0;\r\n\t0 0 1 2 3 2 1 0 0;\r\n\t0 1 2 3 4 3 2 1 0;\r\n\t1 2 3 4 5 4 3 2 1;\r\n\t0 1 2 3 4 3 2 1 0;\r\n\t0 0 1 2 3 2 1 0 0;\r\n\t0 0 0 1 2 1 0 0 0;\r\n\t0 0 0 0 1 0 0 0 0;\r\n\t];\r\nboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' oobbppp ';'ooooopppo';' oobbbpp ';'  ooooo  ';'   ooo   ';'    o    '];\r\nboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'  oobbp  ';' oobbppp ';'  oobbp  ';'   bob   ';'    o    ';'         '];\r\nboard(:,:,3) = ['         ';'         ';'    b    ';'   obb   ';'  oobbp  ';'   oob   ';'    o    ';'         ';'         '];\r\nboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'   ooo   ';'    o    ';'         ';'         ';'         '];\r\nboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n%orange wins 25 to 9 (b) to 7 (p)\r\nassert(isequal(rumis_scorer3(board,stencil),'o'))\r\n\r\n%%\r\nclear board stencil\r\nstencil = [\r\n\t2 2 3 3 3 3 2 2;\r\n\t2 2 4 4 4 4 2 2;\r\n\t3 4 5 6 6 5 4 3;\r\n\t3 4 6 7 7 6 4 3;\r\n\t3 4 6 7 7 6 4 3;\r\n\t3 4 5 6 6 5 4 3;\r\n\t2 2 4 4 4 4 2 2;\r\n\t2 2 3 3 3 3 2 2;\r\n\t];\r\nboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\nboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bbyyyggg';'byyggggg'];\r\nboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';'  yybo  ';'  oybg  '];\r\nboard(:,:,4) = ['        ';'  yybp  ';' rgbopp ';' ggbboo ';' boybog ';' rbggpp ';'  ybbo  ';'        '];\r\nboard(:,:,5) = ['        ';'        ';'  gboo  ';'  ggbb  ';'  oyyy  ';'  ggpp  ';'        ';'        '];\r\nboard(:,:,6) = ['        ';'        ';'   oo   ';'  ggbb  ';'  ooyy  ';'   gp   ';'        ';'        '];\r\nboard(:,:,7) = ['        ';'        ';'        ';'   go   ';'   oy   ';'        ';'        ';'        '];\r\n%green wins 14 to 11 (o) to 10 (y,b,p) to 9 (r)\r\nassert(isequal(rumis_scorer3(board,stencil),'g'))\r\n\r\n%% anti-cheating case\r\nind = randi(4);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t0 0 0 0 3 3 3 3;\r\n\t\t\t0 0 0 0 2 2 2 2;\r\n\t\t\t0 0 0 0 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\n\t\tboard(:,:,2) = [' rbrbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brbr';'        '];\r\n\t\tboard(:,:,3) = ['  brbbrb';'  rbbbbr';'  rbbrbr';'  bbrrrr';'    bbbr';'        ';'        '];\r\n\t\tboard(:,:,4) = ['   rbbrb';'   rbbbr';'   brrbr';'   rbrbr';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'b'))\r\n\tcase 2\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['yyyyyyyr';'yyyyyyyr';'yyyyyrrr';'yyyyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yrrrgggb'];\r\n\t\tboard(:,:,2) = ['        ';' ryyyyb ';' ryyybb ';' rrygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\n\t\tboard(:,:,3) = ['        ';'        ';'  ggyy  ';'  gbyr  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\n\t\tboard(:,:,4) = ['        ';'        ';'        ';'   by   ';'   bb   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'y'))\r\n\tcase 3\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t1 2 3 4 5 4 3 2 1;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' oobbppp ';'ooooopppo';' oobbbpp ';'  ooooo  ';'   ooo   ';'    o    '];\r\n\t\tboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'  oobbp  ';' oobbppp ';'  oobbp  ';'   bob   ';'    o    ';'         '];\r\n\t\tboard(:,:,3) = ['         ';'         ';'    b    ';'   obb   ';'  oobbp  ';'   oob   ';'    o    ';'         ';'         '];\r\n\t\tboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'   ooo   ';'    o    ';'         ';'         ';'         '];\r\n\t\tboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'o'))\r\n\tcase 4\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\n\t\tboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bbyyyggg';'byyggggg'];\r\n\t\tboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';'  yybo  ';'  oybg  '];\r\n\t\tboard(:,:,4) = ['        ';'  yybp  ';' rgbopp ';' ggbboo ';' boybog ';' rbggpp ';'  ybbo  ';'        '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'  gboo  ';'  ggbb  ';'  oyyy  ';'  ggpp  ';'        ';'        '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'   oo   ';'  ggbb  ';'  ooyy  ';'   gp   ';'        ';'        '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'   go   ';'   oy   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'g'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(4);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t0 0 0 0 3 3 3 3;\r\n\t\t\t0 0 0 0 2 2 2 2;\r\n\t\t\t0 0 0 0 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\n\t\tboard(:,:,2) = [' rbrbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brbr';'        '];\r\n\t\tboard(:,:,3) = ['  brbbrb';'  rbbbbr';'  rbbrbr';'  bbrrrr';'    bbbr';'        ';'        '];\r\n\t\tboard(:,:,4) = ['   rbbrb';'   rbbbr';'   brrbr';'   rbrbr';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'b'))\r\n\tcase 2\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['yyyyyyyr';'yyyyyyyr';'yyyyyrrr';'yyyyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yrrrgggb'];\r\n\t\tboard(:,:,2) = ['        ';' ryyyyb ';' ryyybb ';' rrygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\n\t\tboard(:,:,3) = ['        ';'        ';'  ggyy  ';'  gbyr  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\n\t\tboard(:,:,4) = ['        ';'        ';'        ';'   by   ';'   bb   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'y'))\r\n\tcase 3\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t1 2 3 4 5 4 3 2 1;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' oobbppp ';'ooooopppo';' oobbbpp ';'  ooooo  ';'   ooo   ';'    o    '];\r\n\t\tboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'  oobbp  ';' oobbppp ';'  oobbp  ';'   bob   ';'    o    ';'         '];\r\n\t\tboard(:,:,3) = ['         ';'         ';'    b    ';'   obb   ';'  oobbp  ';'   oob   ';'    o    ';'         ';'         '];\r\n\t\tboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'   ooo   ';'    o    ';'         ';'         ';'         '];\r\n\t\tboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'o'))\r\n\tcase 4\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\n\t\tboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bbyyyggg';'byyggggg'];\r\n\t\tboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';'  yybo  ';'  oybg  '];\r\n\t\tboard(:,:,4) = ['        ';'  yybp  ';' rgbopp ';' ggbboo ';' boybog ';' rbggpp ';'  ybbo  ';'        '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'  gboo  ';'  ggbb  ';'  oyyy  ';'  ggpp  ';'        ';'        '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'   oo   ';'  ggbb  ';'  ooyy  ';'   gp   ';'        ';'        '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'   go   ';'   oy   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'g'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(4);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t0 0 0 0 3 3 3 3;\r\n\t\t\t0 0 0 0 2 2 2 2;\r\n\t\t\t0 0 0 0 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\n\t\tboard(:,:,2) = [' rbrbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brbr';'        '];\r\n\t\tboard(:,:,3) = ['  brbbrb';'  rbbbbr';'  rbbrbr';'  bbrrrr';'    bbbr';'        ';'        '];\r\n\t\tboard(:,:,4) = ['   rbbrb';'   rbbbr';'   brrbr';'   rbrbr';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'b'))\r\n\tcase 2\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['yyyyyyyr';'yyyyyyyr';'yyyyyrrr';'yyyyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yrrrgggb'];\r\n\t\tboard(:,:,2) = ['        ';' ryyyyb ';' ryyybb ';' rrygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\n\t\tboard(:,:,3) = ['        ';'        ';'  ggyy  ';'  gbyr  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\n\t\tboard(:,:,4) = ['        ';'        ';'        ';'   by   ';'   bb   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'y'))\r\n\tcase 3\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t1 2 3 4 5 4 3 2 1;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' oobbppp ';'ooooopppo';' oobbbpp ';'  ooooo  ';'   ooo   ';'    o    '];\r\n\t\tboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'  oobbp  ';' oobbppp ';'  oobbp  ';'   bob   ';'    o    ';'         '];\r\n\t\tboard(:,:,3) = ['         ';'         ';'    b    ';'   obb   ';'  oobbp  ';'   oob   ';'    o    ';'         ';'         '];\r\n\t\tboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'   ooo   ';'    o    ';'         ';'         ';'         '];\r\n\t\tboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'o'))\r\n\tcase 4\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\n\t\tboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bbyyyggg';'byyggggg'];\r\n\t\tboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';'  yybo  ';'  oybg  '];\r\n\t\tboard(:,:,4) = ['        ';'  yybp  ';' rgbopp ';' ggbboo ';' boybog ';' rbggpp ';'  ybbo  ';'        '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'  gboo  ';'  ggbb  ';'  oyyy  ';'  ggpp  ';'        ';'        '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'   oo   ';'  ggbb  ';'  ooyy  ';'   gp   ';'        ';'        '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'   go   ';'   oy   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer3(board,stencil),'g'))\r\nend\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":26769,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":30,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-03-21T02:22:09.000Z","updated_at":"2025-12-08T02:51:40.000Z","published_at":"2015-03-21T02:22: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\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"}],\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\\n\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Rumis\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRumis\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a multiplayer 3D block board game where the goal is to have the most squares visible, when viewed from above, after pieces have been played till there are no moves remaining. The picture below shows a completed 4-player round. There are a variety of board stencils and permissible heights possible in this game.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 this problem, you will be provided a completed board of varying shapes with anywhere from two to six players, inclusive. The players' colors will be selected from the following options, though not necessarily in this order: red (r), orange (o), yellow (y), green (g), blue (b), and purple (p). The character-array board will contain various stencils and maximum heights for each square. As an example, the following board represents an L with maximum heights varying from one to four depending upon location (zeros represent non-playable area):\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 3 4 4 4 4 4\\n1 2 3 4 4 4 4 4\\n1 2 3 4 4 4 4 4\\n1 2 3 4 4 4 4 4\\n0 0 0 0 3 3 3 3\\n0 0 0 0 2 2 2 2\\n0 0 0 0 1 1 1 1]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eFor this problem, the board will be completely filled in, and, in line with the game's rules, all players' colors will be represented on the first level. Write a function to count the squares visible when viewed from above to determine who won each round. See the test suite for additional examples (including test case 2, which represents the completed board shown below).\u003c/w:t\u003e\u003c/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\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAGuAosDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKCQOtABSEhRknArO1HW7PTYmeaVRgdzXlHiv4uRx74dPO9uRuzwPxpNpAepal4isNNUmaZBj1NVNN8Y6VqbYhuY29wwNfKWs+Lr/Vp2aedpOfu5+UVQstev9OnE0UrIc5ytGvYVz7cSRJFBVgQadXzx4Q+MMsTJBqByP74r2nRfFWn6xArwzodw7Gi4zeopFYMMg5FLTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqvc3sFqhaVwoHqa888VfFLT9JV4oZA8vZVOTQB397qdtYxl5pVXHqa8x8WfFq0sQ8Nm3myjjCnpXkXiP4i3+syOpnZEJ4RD/WuPklnumyScUld7CbOg8QeOdS1mZvOnOw/wKeK5zzJ7p8Mx+lbui+ErvVXTy0wjdWau6s/C+kaTCBNiS4HUnpQ2ouy1Y1BvVnDaP4QvNSIcp5Uf95u9aGp+DpbeBngPm7RyMV2kepxROF24jHpVhb2CRvlX5TXPVqYijK842Rd6KW54pJbz202NpRhWvo3im+0acNFK64PY8V6FqPh621UNsjAb+8OtcVq/hObT0ZwvmgddvatYVadVdmS4NarVHq/hH4wRybIL9tp/vZ4r1zTNdstTiV4ZlOfQ18VCKWBt8eVx2roNA8b6los6lJ2CDqpPFW01uTc+yQQRkUV5F4R+LlnfhILxxHL0+Y9a9QstTtr6MPDKrA+hpjLtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUySVIlLOwA965TxF480zRIWLzruHbNAHUzXEUCFpHAA9a4fxP8SdM0SJh5ymTsoOSa8i8VfFe71AvHay+VH655NeYXOoXF9OztIzs3VmOTSTvsK53Pir4p6nq8jxwOYYT6H5j/hXCPPc3rkncSeSSasadol3qU6pBGzlu+OK7zSvA62IV7+RW4yYwaUpRh8W41FyOO0vw9dX8qpFCSSeWPSvQNO8JadpNsZL9xJMeg7Vpfabe2txDbxquOOB0rIvvOuH81ZCzAfdPSuqlhK9f4vdj+InUpw82aj3ywxiO1AVAMDFUZC8jEuxOetVYpBgBxsb0NTFyB0zXq0MLToK0Ecs6sp7i+Uvc0zc0f8Aq81J8pGSwpDtH0reUIzXLJXRlcsW188fJYqfarpuBLGVJB3dcjg1jSSLt/djc1LCkpjcvLgn07V4mKyf7VB/I2p1pQ2KmoeGI9SLmIhH5OF71xuo+HrrTwfNRimfviu/02A2c0jvO7BhwM1LeBp4zHhdp7NXnudWhLkqI9CMY1Y8y3PJQZrdwY5DXceFviHqGkSIhuGZB1Vz/Wqep6BCWzAdrYziudm02eNyPLII71suWprF6mUoyjufT3hb4n2GqqsU0gSXuCa9Bt7yG6QPE4YH0NfDsFzcWUg2yEEHPBr0Lwz8UdQ0d0WeQzQ+55FGq3JufU9FcP4Z+Iuma5CuJ1DnqCeRXaRTxzKGRgQfSmMkooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKQkKMk4rH1bxJYaVCzzTKMDuaANdnVBliAK57XPF+naPCzSzKCPevJ/FvxgLeZBp3PbeeleR6p4kvtVnLyTO7k9SeBSvfYVz03xb8XLi4Z4bIlEP8AGf8ACvKr7WbvU52Z5Gdj3Y1WNtNKdzksT2rUtNClkVZXGxKJRUdZsai5PQxo7GeeXaI2Yniuh03wuYyr3J567B1xWzp1r5LiNIcj+9WxBaxwuZJGLHrj0rH2vPNU4u1y5clNXkLYTQabBsiRUHoOtJPfTXRyCcDtmqd+6SXilTsQjninRzRIuAwY+tfR4fBU6GqV33ZxSrOZZUnA4PuaV5QvCkE45qs1ypBGaqSSZPfFdaMlHuX/AJJMmQgjHAqJTLCxKHfGf4T1FUpbry13dAPWsm71lyCIyR70pNJalKDex0Ul0pC+WuXPbNOibcR5p/AVx0N7LktuOc1qWerHcA5x70Jpq5Tp2OkBVV+UYFPBG3HrVOC5SQD5utT7sHjkUzLlsSnhRg0zzQHBbnFDMEUsetZl5qUcQIzzWVWjTqq01dFQc4v3WTTLvuQ2dw9KbKUuFaIRfpWKuoPPdIoOFJ5rYOWXn5eO1fPYvCxoztTkevR56kOZo5u+0eJXaWInr901i3Ns8bElCortJoC5+Ulj6U+a1Se2AlhXjqawjWcdJkypJ6xOIstRurCYSQTOjDoQa9R8IfGG8sHSDUSXTpvH9RXA32jxq26Akr3FZX2R1Y8EHtWytJXiYNOO59i+H/G2m63AjRToSfeunR1dcqQRXxBpus3+kXAktZnjYHnB4NeueEPjM0bJb6n8vbf2/wDrUCufQtFYej+J7DV4VeGdDuHY1tghhkHIoGLRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRVO81O2sYy80igD1NAFwkDrWbqOtWemxM80qjHqa858V/Fi0sFeK0YSOOODwK8V8QeOr/WJX8yZmU/wA8Ur9EFz1rxZ8XI4FeKwO89NwPArxnWvGF/q8rNLMzkngZ4H4VhSNNccuSfatnTtD+2wgj5B6kcmjl0vISvLRGU0E8oEjkkntVux0yRn3MAF9+tdTa6FBZqFYl3PQe9aEekQjmTr2ArOeIjD4S3CMFebMyy0yKOHJTcx71r2tiiKd7EjstWgqRxeWqjH0qAo6nKk/SuKpWczGeIe0NCXKhcJwBSquRyeo5qJHzlSMGiZwkDleoXNXhf48fVHLNtq7M3UovLVmByegrAaeRScEg1ba7aUEM2cVSf7xzivuAgrFyG5YKuec0s+oCPKgBm/lVJW+ULnvRNGQSTxWdSfKjVRT3K1zdyTZ3MTVJ2IFWpEGaqSj5unFcdSbZpFJEtqSVNS9G4qG1OAan71vTfuoLFu1vHiOM1rxamBAzsQNvaufUHNSSgrbk+tauVlchxTLN5rssmdpwKymumkbJYk1CWJ60mB2rllVkzSMEti9ZS5vEz611ke4AZ5FcdYqRdoRzzXXiTaOegrwcyblNeh7OX6QYrxbmypIPtTWJ4WVsAd81Xl1NQSkKl39qSO1numD3DFR/drljVaVqm34nTUowqfBuWFto5c7MHJ4Oail0qO6OxhgjjIq8FWEAIMYpS46rwTW0LPWm/8AM4qlCUNJrQ5290EQBghDqBzzzXOz23lklCa73ypCrN1zxWdd6VFKy78J7gVtGsnpJHHOj/KYuh+KNR0KdWtZ3VQeUJ4Ne1+EPjHBcbINQPlv0yTwa8Xu9HkjJOzeuM5Wsd45IJOMg1bj1Rjqj7c07W7PUoleGVTn3rSBz0r428OeONV0GZRHOxjH8DHivcfCPxastSVIrp/Lk6YapGesUVUs9Rtr2MPFIrA+hq3QAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUU1xFAhaRwAPU0AS1XubyC1QtK4UD1NcZ4m+I+m6LEwEylx0AOTXiHib4o6hq0rxxO0cR7A8mk2K57F4o+J9jpaPHA4eQdlNeI+JfiJqOrzMhlYIc/Ih/rXJT3VzfOfMcjPNaulaBLckOIzt/vEcUcrteTshq70RhyS3Fy5Dk4PatPTtFmufuR9uSa3Bo0UE3mMN5HXI4rXsZljiZQhViOuOlZPERStA2hQb3Mm00WG1I81cv71r2tsisVLhMcgCnsd4+bkjvWddySLKMZHHFckqrm99TbEU50aXMlY29yqAFAyO9OwWxmsi01HZxLk56GtIS+Zgqe1YOLuePJtvUkx/Dmkxj600uByetV7i9SHqcsegFCTZJM5XblsD3rLvNQjiDxrlyR/DzipPLu70gyN5MR7dyKkktIoLdliXnufWt6MlTmn1QO1tTk/NUucHn0oYk067tFMrMpKtntVUSNDxKDj+9X1NDHQqKz0ZpGzJ1bEi/WtWS334JI55rKiKyEFTmtvK+Urseg71WKm1FWNoJGZcW6oOOTWVcJhuOT6V1Fppl5rM/l2UR29DIw4FdjpXgG0tdst3++lxznpmvnsXm1HC6Sd32Omnh5T1seVwWlwIvMaF1Q9CRUqxE5r3KTRraS38l4UKYxjFcnq/gUMfN08hcdYz3+lVl/EmHqvkq+6+/Qqrg5RV1qcAkQGKS8XbBV+ezltJjFOjIwPcVTvyPJGK+kUuZXWxyGTs4460Yp4yT8opuwgnJyfauSUlHVs1Svoh8D+XMGXnFbUMV1fYLsY07Csu0gXzVLV1MSjy1xnOK8bGVlOV4o9bCUWo2kxbazitk+VQT6nrVgZJqEeZG2XyRViGRT715z7npRVtELtyORzSNEMcVOSoGT0qndXqxrwcAVEW76FNJrUN/l55Aqm13CshD/ADHvzWbd6gXJCmnaMqXV04l5GK7lOXLeep5WL9lBcyNZrmGW32QjB71n3Oirc7WUbWPSr02mGMboWJHpU9pe+VlJ0yw4B9KUa7+yca5ai7nK6ho09sv7yInPQqKzALizbKEjHavUIruBgN0YcEYway9T0i2uQz26bHPQdq3jiIy0nozKdBrVFPw38StU0OVEeRpIh1DHkV7l4U+KOm61GqPMqyd1Y4NfMd9pVzbSHzUOOxFVYZ57OUPE7Kw6EHGK25dLox1W59y291DcoGjcMD6Gp6+V/CnxY1HSZEhu2aaLpnuK908NfEHTNchXbOu49RnmkM7SimRzJKoZGBB9KfQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNZ1QZYgCgB1MklSJdzsAPeuf1zxfp2jQs0s6AgdzXivi74wz3LPBpxIU8bzSuB694i8eaZocDNJOmR2zXiHir4uXupM8VkxjjPG7ua87u9RvtWuWluJXkY92NS6fpE95JtSJnf2FPlb30Fcr3N9eX8rNI7szdSTkmrmlaRdXT4ityxP8RHArutG8EQwKk+oyAuOREo/nXYwW9lDBhI0hHcdqwqYiNPSnqzWFK+5xOm+DoEUSXZEjf3R0FbrWQtrdV3BIugFS3OpQ25eOD5z2Pasma4muceYSRXnSrSk7yZ6dDByfSyILp4A2zJJ7GkVcLxyKc0SsMEZqJkaJfkOR6Goc2z0qdCECTIArOv23OMDj1q0ZQR6H0qleNvHy4yKqC944sz1oMrOAO/NTQzPFggn6UJCWAyvPrVgW5ABwK1lJdT5pkjzG5ZYojtYj5iauW+niMbgu5z/Eaz4VH2sr044rSiuJIeCcis5Sa0RDi0iZrdyvPaq1xFIoIxkYrRS6WReSOnSq9xMCvYGpjN3Mzl7mE7ySMVUaFXGGA5rojay3j+XFGXY9gK3tG8Bu7ia+bavXyxWtXHU6EbzZvRoTqP3UcLYeHbu+uMWSEn07V3mk+AS2yTUmLFefLU8fjXb2WmW1hFst4lQewq2owK8TF8QYirH2dN2j+J7NDCRp6y1ZRtNOt7OJY4YlRR0AFWHiwvFTkA0pA6V4Tm27s60ysEymO9HlgDBqXbzxVa8vLayiMtzMsaD1NON5OyKuZ+qaDZ6pCVmiBY9GHUV5P4s0UaPKIVmEgPQZ5FdX4h8fkM8GmKVUDBlPU/SvOri7kuZWkmkZ3J6sc19lkssbh170vdfR/wBaGFbDwnvoUwp78e1PUAdBSdTTl681605ynq2KnTjDYs2w/eAntXRW/KjmsC2Qlxgc1uwfu0y3SuOqzupRLoGeDio5EjA3D5WHeqp1GJQe/pWVf6qz5AOB6CsFCUnZHS3CEeaTL11qKxxld+WrBu79nz81VJLguT1qAknOa7adFR3PMr4ty0jsP81mYEmui8NqWncgdua5noK6PwvJtuHJPG2tKq9xnm153pu51WCp5B4qvN9nlRvNXbjvim3N8sbFVO5/QVS8me5YNKdq/wB0VGGwNTEbKy7nnRqODumV3nmhcvbAOg6E1Lb+JtsqrcRqnY8davGBFUKBVG702GcfMoB9a9OplLjH3feOmGMv8Rbuby0urUlgm0+gzXKXFixdnRTszwDVh7S5sZSY23xg5Aqx/aUM0YR1KP3z3NcK5qWiOi8am5zdxblWzjYaksdSvNMlEsErIw/iBroUsIr1suVwB1JqpqGkm3XMKb09a1Uoy30ZjKm0d94R+MNxZlIdQYsvTeP617doPjLTdagR4p0JI7Gvjv7I5VnA2Y7Va0vXdR0a4ElvO6EHseDQ4tEJn26rq4ypBFOrwDwf8ZcbINSO09N/avZtJ8SWOrQq8MynI7GkUbNFICCMg5FLQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUE460AFISFGScCs7Udas9OiZ5pVGPU15L4v+Mltbb7ewbzJOnyngfjQB6nq3iSw0qFnmmUYHc1474u+MYw8OnHPbdnivJta8XanrdwzTzuVP8IPArKgs7i8nWNFZ2bpilqK5f1TxBqOtTlppnck9z0qKx02a4uAgiaRz6DNdPpPgm4+SS+xEnXb3Nd9p+n2VlARb2yrgYLd/zrCWJhD4dWaRpN7nNaT4ExCJr0rzyEU810sWmxaZGFghWNe+OtX4JBIgW3UyS56CtO10F7j5ryQj/YWvKxmYxj8cvkdMKSXQxReLDbSMIC+0Z4H9a5KfVJbuUgkqufu16teWEMGjXEUUaqPLNePbMSt6g1y4XF/WOZ2tY9fL6MHe61L207QcU7nNRRzFR83IpxvIycIMmtrs9WVOyJMYBBqCWVU68imo9xdSeXBG0j+iiun0jwHcXe2fVHMaHnylPNTUrQpLmqM46tSMNzkkguNQlEVrA8jE4yo4B9zWxJ4B1S2iWZpUdgMtGOten2GmWmm24htoVQDvjk1MwryqubzT/dKyPMrTVZcrWh420JhlMboVYccil2qODXpWp6BaakCWTbJ2YVw+q6Lc6ZIcqWjB+9XZh8dCvo9GeXVwjjrHVGJtK6go6ArVvblsHpVATj+0U54IIrTBBx613z6HHaxC0ZVuCc1Np9qL7UYbeQkBmwSKJF59/wBan0LKa7bnqd3FZTqNU5Nb2Kp04ymkz0fT9CtNOiAgjBP949ateXtPSrKOQgpxRWHua+QlVlJ3k7nsR9xWRU25FIENWWixim7cHGKnmNOa5CVpoBJxVjZTljGeaadxc1jn9fvrvTbQva2xlb1HavKdYvL6+kaS5kYnP3ewr3d1jZSGUEHtXL694TsdTVmjQQzHoV6GvXy/GUqDtKPzOijWgtJI8MmDB+arkDv1rrda8MXmlMTNGWjJ4ZRxWN/Z28Bh0r6uliKc480XoX7Fz1jqZiqSeKtw2xbqKuJaLGMnHFRyXSw8LgVbqN6RLVBQV5kiJHbDdnn0qKe7MgwGwvpVGS7L5xUAcnnNCp9WRKvHaJNPKQPlqg7lieanmb5etUS3zVvCOhw16jbJUHFD/LUfmc01m3cDmrUWc/tFYeSD1rR0lpBK2xtoI+9WYkJJBJ/Cuh0qD5R2BqueEHeSuhKhKsrbGvbwovOcsecmrbZAAqksDxtuQnHXBqVLr5sSLg17uGxdGqrQ08jz6+FqUneRZDbWqQIHBxj8aYACM1Vu7hIRkviuw5Er6EslvlugNZOo2UK8OQrnpjrTH1t0jZYzye5rPSd7m8RnJY5rixkacoNtanRS54u/QYJLrT5QsiEpnOCOtakeqRXEYUSEP/dI4FbElvHPEFkQMCB2rEu/D5DGS1bn+7XzKqxlpLQ6Kde+gyWwklfG1vm9qy5dKmViWU7R04q/Bqt5p7+XcKWAP8Vag1GK5hwhVpDzg9q3VSUd9UbcsZHIG1kEnyHB9K1tE8WapoM4MM7KoP3CeKtTWiMjuTtcdMd6xJ7d0J3KWFa3jPYylBxPfPCHxitrvZBft5ch4+Y8H8a9Z0/WLTUIleGVTn0NfEXlSxqZFJUV0nhzx/q2gSoFmaSIdUY/ypWaFc+yetFeVeEfi3p+rKkNxII5e6scGvS7S/t7yMPFIrA+hoGWqKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiq9zeQWqFpXCgeprz3xV8UtO0hHjilVpccAGgDvrzUraxjLzSKoHqa8w8W/F2x00PDauJJR2U14/4n+I+qa3IyJM0cR7Kf61xbCWZ8uxJNCTewrnT+IPG+reIJWDTMsZ/hU8fjXMJGZZsOSSfStnStGuXIZ48Rnuwrq4dDsbaJJl2+ZjJ9aynVjDzNI02znNK8MySTb7kmKLGcEcmu10xbPTEVLW1yxHJYc5qOzZZ7pYxG0rk4CqMmuu0zwfPcSrNeMYo+yDrXlYvHqn/EdvI6YUYowkNxdzjETyv2Ve1dFYeF76XBvbgxxH/lktdbZ6Za2CbYIgD3Pc1ZI5r52vmk5+7T0RsoooWlhDYwrHEgUL371dRc80rYxQo28ivMcm3dlkOoIDYTf7h/lXiki4mbH9417bdtutZR6qa8Un+W6kUno5/nXs5S9JfI9LL9GxFbBqBIwboAnAY4NTj71Qni5U+hFewj1J3seyaDo1jp1lH9njXeygs5HJrXKYFUdOf/AEK3I/55j+VXt24c18bUqSlNuTPmJ35rsZtzUbgCrAXjioZB3rLmuxRK20gmoLiFJkKyKGU+oq2epqNgc9KtOz0Nkzhde8IA5udPA8wfw1yqXDQTGC7jaKVe5HBr2ELznFZmraDZatEVmiAfHDgc16+FzNx9ytqu/U5a+GU9YnnhwehB+hqfRx/xO7bAI+brnpUGqaBqGhzZXdNbeoHQU7QbmObWrcdBv5FerNxlRlKDurHDCnKFRJnrcf3cVIKYmNo4qUYxXx7PSYBueacVB5FNxnpSgkGgLCYAopxwTQehFCYrkLL70wgZ5qRuBk1Wlu44sjPNXG72LSb2I7mCKaMpKisp7EV5b4202z0p1ltcqH6qOgNehTXjyMecLmvO/iLNuiiA7V7WVKarqN9GdUOamuY4ebUSEKrWY87Ock01myOahLYNfZQppbHJWxE57ssqeM05ZAI6qecNuKYJGBwO9XyXMfbJMmll5Iz1qqSc08KWPNSCHJHrVKyMZOU2RxqWOM4qwkBHSpI4ADnFWo0OelROZ0UaC6jYIeRnrW/ZARxYPBrMij554rRgBBA6iuSo7nqUoKK0NFGL8DpRNAMZIyKarCNc9B61m32rqilU5PrUUnK/ulVYw5byFu9QNrGf3gIxwp7VgzXklwxJOaq3s7SsWYnrRF90Yr6TC1akoWkz5uvGmp3grEgPvV3TgTeRj3qoFJ7Vc09tt2hNaV1+6l6GD2OvXhcd8daaZAg7VTa6L/KnpTo4yeZGyTXj4XLalfV6I5WNvI47xdjRA/7VYd1o81uTJAxIHaujyCeKQpnPNey8spqFoOzNYVnHRnKC/liHlyg/U1dt7mDy/nXzGP8ADWhdadHdfeGD61i3OnTWpLICwryq+FlSfvI7IVFLYfcW0VwhAyh5+lYj2rKSuM89a2ILtZgsc7bQvHAqfZEGIX54j1OKyVRp2ZXIpbHPIJoCJFJXB4INdx4W+J+q6HIiTSNPCOuTyP8AGsZ9KFxuaMFUA6tWLdWnlSbR19a192Wxm4uJ9U+FPidpeuxKvnqJO6k4IrvYLmK4QNG4IPoa+F4JrixnWSJ2jcchlODXpPhP4uahpTpDfFpYhxvHUUthXPqWiuO8N+P9L12BGjnQsfeuujlSVQyMCPagY+iiigAooooAKKKKACiiigAooooAKKKKACimSSpEuXYAe9cr4g8dabosLFpl3DtnmgDqJriKBC0jgAetcV4m+I2m6NGyiZS46AHmvHfFnxcvL93is2MadM9685uLu91KRpZXZgepJzS1ewrna+K/inqOrM0dtI0cZ9DzXAO9xeymSaQkk85Na2kaDdao/lwW7sf72OBXWQeBDYKHuFErjkgdBUyqQp/E7sqMHJnJad4bvNSx5ER2A8ueldZp/hBbAh5lWZuxPQV1Vk8FtpyR7EQY521Vub4fcjXPvXDXxcm7bHVTpKIj20EEQeVlCgcKKw5WaW42wghela1rpk2oy5L4Ud2NWLWGKw1HZKARj5TjjNcXPqbaGj4Fslh1KSVwCyrjnqK9HUg1wHhyGdNcld2BVgTx0rtlcivmMzvKvfyRajdFwg4puDimpMCalxxXnXaFsMK5GabnHA5qQjtSYwMCnzDRVuIy8bKe4xxXlOveGbuzuZbi3DSREkkdxXrbjvWfPCHzkcGu3B4uVCV1sdNGo4s8WguPmKSZVx2NPlb5wfeu61nwlb3haSICObrkdK4bUNPvNMlKXEZIHRh0NfR0MTSr/C7PsepDEKSsz2TR236XasP+eYrSHasPwxdJdaFasv8AcANbgA618lXXLUkn3PEnuyRX2n1oIDU08kEU7qayuRYieMgdKjKY61cBBGDTXiBHFCY1LuUmHSmsCeKstFUTYGcCrTLTK7xqyEOoKnjBFc1N4VhGsw39ofK8s5Kjoa6tl9absxW9KvOnfle43GL3FiuAflkG01Z7ZHIquUBGCKaGeDocr6Vg0nsJxT2LYOBS9qgSVZFBBwfQ1IpqGrENWF60dMUp4FJQIpX0+wYFYM0zO5rV1U4PWsfHOTXdQiuW520IrluI7YTJNefeO5N0SV3Vw+QRnivPPHDYgQ5717WVwvXTHWlaDOEdhg1WkJ7U/wCaQnaDViG17ydfSvrNI7nkWlUdkU443kbAHFXorYKcHrVlUUDCjFRsj54zipc7m0cOoq71D7NjkCnpAd3SnwNIpwRkVfj2k8jmspSaO2jRhLYgjtx3FWoLXJJA6DNWBDgA0uPLG52AFYudzujQUURlQB6Uz7WkDetVbm/XJCGs2Scu/WrjSctzmrYmEHaJo3upvKNoOF9qynkLE80rHPWozgqRXTTgorQ8+tVlN3bIJPmcelWkAAxVVlKkY9asJG8nsK9PDbaHmT31JRL2HNWrKJmlBJwKijhROgyfWtC0T5s16MKN/jMZS00NWJfLx8uVPerKgYz2pkX+rANOZO6nmupJI5R4UckU4JgZNRq2TtYYNNlulgBDkYHrSY0iaTaAKzby/hhBXq3TFUL7V8kiM/jWI9wXfczEmuWvWjyuO5vTpu92PuG3TswwAfSn2961u3QMPQ1Udizk+tNySa+eaudV7G8NZNwgjIC9qc1vG0irJg99wrAUHsatw3ksQxnI6VHJZ+6Wp30ZcltAQyxL5lZstkU6gq1bNnfRlhhipPX3q7LPbshSe3BLdGHWrVXW0hOndXRzun6jeaVdLLBM8bD+6a9q8GfEm6eJFeUTEfeTOH/Ad68gntvN3bI//rVWWCe0cSxSFGHIwea0cb6xZntufYWj+K7HVUG2QB+hU8EGt9WVxlTkV8g6T42ubSRVuyzMOkqnDj8e/wCNes+GfiZ8qLLMJ4v7y/eH1FRfuP0PZqKyNL8Q2OqRK8MynPvWsCCMimAtFFFABRRRQAUUUjHCk+lACM6oMsQBXP634v07RoWaWdAR71xHj/xxd6fLJZ2SM0oXcSOgFfPuueItS1O5b7VI5OehPSle7sgPUPFvxiluGeGwYgdN1eV3esX2rzl5ZmJPqay1XJ3E5Jr0Pwz4Iiv7ZLu4nBQjO1P60S5YK8wSctjktO0O41Kby4ImdieuOK9A0PwXDZbft53nqUHSuotdPh0xRHBGoUDsKmubj7OhcpvZulcVXFv7OiN4UrbkkZs7CPFoixp0KioJ9Uj8to0XdurIllaQnJwvoKvrZRR6WLhyWkY8AdK4ZVXJGtrGW9jdXGXWNth6elXoLBYbYFIfNue6t0q3NeJc6eirN5LoPu+tVLe4uppRDJGenyyL/Wslo7FptoNUtJktomiUrKT8wQ8CmWu93W31Bdu4ZWQnGKrXmtTQyyR4D7TgEdDWTd39xeSq87HI9O1NJP0K1Ov0Z7WHWlhguHl4PPau0GAOvNeS6Rq8OnarHPJnywcEivTrHULXUYRLbSq6n0PIrwczpSVRTtobQtaxfB9KmSUjHNVge1OzgCvJaG0XlYNSkcVURjipo5OxqGrEONgkBxmqzjNXG+bmoWXFEWOMio0QYHNV7nS7e8gMU8auh9av4yKAO1aqbWqZpzszrXTl02JY7YYiXotaEc24Y6H0pwXNNeIM3ofWiUufWW4m1LcsryuafVISPFhWHHrVmJw4BBrKUbGbjYcTinqcc0088UmcVJIjMWY0wruPFCk7z6U5TzkCnsN6DTFimMuBVs4I96hdeenFNSDmIwnemyKMc1KenyiozHkcnmmmNFK4DuMQ8N61kf2zqWkzEahCJLYn5ZUHI+tdL5YA6VHLbrIhVlDKexFdFKrBaTjdfiW5Jqw22v7e+gEtvIHU+lWQRXL3eiT2jm40yVo2HPl5+U1JZeJlEq22pR/ZZvVj8pqpYbmXNRd1+KM2uxd1XlhWPJIEXmr2u6ja2lt9ollQR44OeteXa340lnDw2a7UPG89a9LLcvr4uyprQ39tGnT1Z0OteILPT0YO4Z+yjqa801jVZNXuMyjbGOgFQyyvM5eVizHuTVcrX3mAySnh43k7yPMrYqU35FmKCFU+Wo3jO7imLlVyDxVmNgx5pV8FUp+8tUd1HE06iUWrESxMBmpkiY1cig8zgVZjsWzxXnyqJbnowoN6ozfJOKkVCF3MQB61ZuHit1PdqwL6+Z+A3HtVQUpmFeUaKuy9JqZXKodwHeqNzqE0/BbiqUbnByeacTzmumNKMWefPF1Jq1xQzHrTlyKRcYpTwM9qsx9RWyRQBxxzSqpc+gqdUC9K6qWFlPV6IznWS2GogyCw4B6VZBDngBR6Co1T1qVFxivWo0lBWijmlJt3Y9FPpV62HIHSq0bN0xkVdgUFgcYrqSMJF+MHFTqQo5qBp0hXLsB9aydQ1kH5LfIxwW9amc1BamSi5PQu32oxwKRkM+Og7VzlzfyzsSzE1BJKXyxJJNQk/LXDVruWnQ6YU1Ec8hI5p0UJkcdh61GABgsfwqSOXLjPCiuWbSjqWtxjja7Drg0wA9as3jwNIDADtxzn1qEDJAFefctiAetSxwvIyooPJwKt2WnyzTI0sb+ST8zAdK6e7bRntxY6dlJlGTJIMZPtUOXYtQ7mPLoC2MCveXKxysMqg5NVfMkt5VDqZE9QKv3NxcwmNL+28wLwHPpWnM0X2KNoJI5NyfcwOD6Ui0uxQgu42YGBB/tKe9WWsoblWkul8sdgo5rM1G3W2ihkRgty3LIvaiC5uHwJCxWi7hsw+LRlLULAJMTDynaqyPPYyrLBIVZecg12MFpHM6hFJUjJzUV9o0Mp/cR8juKI14vSRLoveI3RvHt3YyKZWKyA/fXjP1HevZPC/wATVuIE+1EFD/y0U5A+vpXgOpaSbJVaYYDfdPrVC1vrrT5t9vMygeh61ry9UZ37n2tY6ta38QeGVTn0NXq+VfDXxAntJkDSGA57fcP4dvwr3/wf4mXXLRTuBYdcHIoA6uiiigApCMqR60tFAHlPirSY7HxJHqVzC0lmylJQFzgHoa4XxJ8O7bVEfUNHkSSNhuGw5r6GvLCC9iMcqBgR3rzvWPB99o9w19ocpTnc8J+4/wBRUuOt0I+Zb/TLrTZ2jljYYOMkVuaF4sudMWOFWJQH5ge9erXdlpXikPZ31v8AYdUx9x+A3uD3ry3xN4J1DQ53ZYy0YPBUUXUvdmgUnE9F07xNY6iq5fy5Dxhu9bCo9ygiwAByDXz5HfTwTKS5DKfyr07wx45LiO2vSAmAoYD+dc1TC2Xu7G8al9zprrTcAlGBI6iooLqS2jMUihkPY1pu8LqskThlPbPWorhFumCqgBPpXnyp2+E1uUWk06RHDxPnHABrAuLy5RmRGdI88DNbl1ZtATxketZ9zH5ic9qxvYuLszI3sRkjn1qN2JHHSrhKrlcVVbgnAxmqTNSHy1btVizvr7SJRPaORjqp6GliXB4GTU45+91olJNcrV0JxO38PeM7bU8Q3WIbnpgjg11Stu5zxXis1vuk3Rna45BBrd0XxrPpey31ANJAONw5Irx8VlnN79D7v8ilNrSR6jnApwOBVGx1K11K2We1lDoffkVbJAxXhyi07Pc10exOHwOtSZDiqoPFPDYFQ0Q4kjrgdKAopVkDCngA0ibtDAvFJ0p+CSQKbtA4NAxhTzFII4NR+W0C/uzkelWBnoKRhTUmNSGRTZb5uD6VOcEcVWeINzjmkV3iOG5HrQ0nsHKnsSA5kIqTpxUKTI0zKCM1PwRSegpKwuc01m5xTtuBUTj5xSQh4IK8UhFIBhacPegkb7UmaeVxzUTMFHJprUpainGMEVk6rYWV3CVuUUj17ipbm/EeQv51zeq6o2xsnnFduGpVHNOOh0U6MpM8+1uRJbyeyNxIyQtiMMeAK5ye3eMnI4q5fSF9Unf1NMZ+MHkelfsGBhGNCKtbQ8arfndnczyBjBqIrWgbcMMr+VQtCQa71EwbKpzgDFSRRs2MVI/lxjLGqM98wyqcClKUYLUWrNmSeGziG590noKiOqMV4OBjpXPeYWfJJNWVcEfhXzmNpwlU5krHq4PFVIR5bkl1dvKx54rPc5PNTFSck9Kry8GpgktjGvOUndjoxxmph8wFR26grz61ZWJj0GBWsKcqjtFGd1GN2MCknA5NWI4gpDPg+1CptXAp6gn6V6VDCxhq9WYzqOXoKwBPy8e1KFI5pQnNTquVxXaodzK5Gi5qZYiTToYWY8CrXyQDLkL65rVJIiUggtiT05qW4uYbFSHwz4+6DWTc6yy7kgJAPG7vWS8rM24sSTXNUxKWkRKm3uXru+lunyzcDoKqsTxUayjHTmkY85zXE5uTuzVJIUnJxTWPOBzSjJI7D1obCt8h/GsJ1EtikLgAZc89hSdfb2pVUuwA5JrobTwpcSWguriSO3iPQyHGa5Z1L7lKN9jChh3uqHjPc11Wn6Vp1mFbUQ7KTkMnINQS2EcVoiTIpTPEyUhgvLBVZf8ASLY8jvWDdzVRtubOp6gXjit7S3FvB0WRec/WqE1nAi5ulYu3KzR9Pxp9uzX0Za0QrsGXjPSq8t6htmWJyH6NH1Gfapd0U3csWhZHS21OTdZN91+uKNU+wzhbbS4WREPMrfxVTijJiRrslYavwyC5XyLaIbF/jxUzqv7KCMU3qzPgsH84FwXJ4rYi0h8Bn4HpirtpYGIGTOSvNOvNTihQSzSbNo4B6k1haU5WZt7qJItJeCEzeZtBHSsy88Q2mlwmG1UvN3c9AaxtU8SXd0rJbuUiPXnk1gy3PmJgjc5711QwvWoc863SJYvb2S6lMlzLvz0HpVBY3mk2opwa0NM0O61KQAIdvrXoGleE7ewMfnKZrg/dhQZJ/wABXS2krIw1Zzug+E5J2WWddseMlm4Ar3L4c6Z9lkZ4QfIwADjAOKj8P+CZ7sJLqACQjlYF+6Pr6mvR7OxhsoRHEgUAdqgpFqiiimAUUUUAFIyhxhhkUtFAHKeIvBlnrERYJslHKuvBB9jXBXgvtED2euwNeWB4WcLll+v+Ne0VTvtNt7+Fo5owwI7ik0nuB84+I/h5aajAdQ0R1ljbnCnpXmV1YXmlTGOVGTBr6S1nwbf6JcPe6HIVUnLwH7j/AIdq5e7s9L8Vb7W9hFhqI48t/wCL3B70lKUN9ibPoeZ+HfEr2Fwoldnjxggn+VeoabrGlaqi/ZpNs23lDxivLPEXg+/0K7cGNmjB4ZRxisW21Ca2kBDMjDuDg1NSjCpqtzSNS2571MDtKthlI49qz57BSMxDJx0rl9B8ZRNCI7ogIFxvJ5zXV2t2t5AJLZwyMOorza1JrSR0RaeqOeu7QrIWbP0qs0QbANdZdWsAt/NlkA9u9c69qN5dWJXtXHJOO5vF3RAEEZ4HFP8ALOORin4X8qje5QNtDDNRdvYoZMm1c1B5fmfeAzn0p010Pu4zTFm5/rWiTSALa6vdGn+0WMhHOdh6Gu90HxvaamqQ3hEF10x2NefyM0sZEajjvUAsmYls7W7YrLEYWliF+80fcSbT9090BBUEHIPQ0u7IxXlOheLb3RsW92TPb+rHJWvSNN1W01SETWsyuO4HUV89isFUw711Xc0jNSL4ypFTqxAzUGM807PFcTVymi0pDD3oZD1qsHx3qdJsjmocTNxaHbSKaRUoIIpCvOKkVyEZzSMBzUjL1pCmVp3KTKT2+H3x8NUsdwUISUYPrUp4pGjDjkVfNfcvmvoyXcD06U1uJBVRhJAModw9KfHOJWX19KXL1Fy9UWSecUhPNOIwQaQ81KMwL8VkXk7ZNarcKax7lcls1tRSubUUrmbcPlc1ymrSklua6i5HykCuR1RdrtXtYJe8ejDZnCXEyC9mBPOaVSGOAagmQvfzY65p8ashwa/TsNL91E+ZnbnZdSP5aiu2WG3ZiuW7H0qaObKbcEn2qjqLsICrAg+lbxq9DKUboxZbhnc7jVZj1zT2PFRHrXJKTe4khUxmrURAWqijmpdxC4HWuCurs6aLUdSR2ycA/hUEiHdzTgxU8Dn1pwRmJPXNZrQcrzY61IjlBK7l9DWxHEtwD5HJ64rPhtuM96twCSFtwJHuK6cPjvZPlewPBSmrrca8Tq2CpFKANtXP7RVk2Txhs/xjrSCBW5Rgyn0r2aNWFRXgzhnGUHaaK8aljwKuQW7Z5FORYrZC8hAArMvNVaTKRfKvtWk6kYLUjWWxoXN/BajahBkHTHasK6vZblyzt1qu7kkk0wtnHFefVrymaRikKScUU1ulKoyOelczkWKMk4FSBNoyevpR8qn5eaXJJANYzqdhpDgS+F7V0Gg+E7rW5f3YCxDqx7VgKNvJra0fxJd6U22Jv3bH5l9a5pttaFxS6nYzeALW1iBiusyrzuPSsm/a4O231MM8IwFkQdPfFb2k+I7bUmCyOqMOiN0rTvntpY/KaJcfxE9hXJ7ScXqbJLoc5cw2c2mR2lszNCF6r3NVINNa20qeQ3i/IRiMnk1UuQNP1ZTYOXXOWUdK11it7m58+U7D2TtmqnXjFAoNsr2H225sWWOIRMw2lgMZFJb6Zb2M+11LzdfXJq8944jMEI+UdXA7UsWxW3Z3E9W9PrXM6tSXobKKW5A2j/aD51xkRjouelasUcEMCmJQIl7isrUNSWzQgkkHn2Ncnf6/cyholcxx+gNa06M6iREpxgdhqfie006N4LfbJMw6joK4O8vHumaS4csx6D0qjJLnODub1q5p+k3OoyKqIxBPpXoU6UKa03OWVSUyqgkmfZGCc12Ph/wa87rNdDZHjJJ9K3NF8M2+mbPtEXmTt92MLlia9J0PwZc6kUl1BRFAMFYF6fj60OV9iUrHPaLost0otdKg2x5w1yy/+g+v1r0zw/4OtNLQSSL5kzcs78kmt2w0y3sIVjhjVQB2FXaSVhiKqoMKMCloopgFFFFABRRRQAUUUUAFFFFADXRXXDDIrkfEvgiy1iIuqbJhyrrwQfrXYUUAeGXw1DRCbPXbdr2yPyrcY+ZB/tf41x/iT4fwzxG+0aRZYmG7CnNfSuoaVbajC0c0asCO4rzPV/B1/oE73eit+6Y7pLc/df8AwqHFrWImj5tuYLizdopQy4PSt/w74rutHOxCDG33g3P5V6Pf6NpXivzYzCLHUV6wvwT7j1rzDXvC19odwyujbAeDineM/dkCbiegwavbarEGRyGbqD2qaG5SOMxMgb0NeSQXs8EmVkZT9a63w94mV51hvBweA4HNefWwjWsdUddOsnozeu4pXO8DaPQVlvCRLncd1dYttDMpfcFUngetVm0+OVyqge1cXMo7G/qc7Gh3fN0zxUxKbwCDj09qt3Vk0D4xxnriqrwqT82R70cyYycKEU9hSpnJpY4xsxyeOM0bfm4rO47kEqq+RjoKgtri80y4E1nI6AHJUHgir5Xg5xjFVLieKF8OQM1cXzLlauhNdT0Lw/43tdQ8u2u8Q3J4GehrrMjrkEHuK8Burq38smNiJRypHXNa+geNdV0wCGdWuYPVuorzMTk/Mueh9z/QUatnaR7KcYGKeDkcVkaRrdpqsKNBKGfGWXuK119q8GcHB8slqb6PYkWQgCp0kBPPWq3TFG7bzWTVxONy2fbmgjNQrNjGe9TbwcVDTRnqiNkowcU5jjmj+GncdyFlyKi8kbtwGCO9Whx2pMU1Iak0RbyOG/OpAwK5pGAPFRKCmcflT3DRk78pxWTdAA1pbwVIJwaoToZG4FXT0ZpS0epjzjcSAKyZdFe8Zs/KK6oWqgEnmpEiUdK7YYlw+E6fbW0R5tqPgVUY3FuCX7jNcfqFlPZTFZoyPfFe8NGPwrM1LQ7TU4mWaJSf7wHNe3gOIq1BqNXVHHUoU5razPEo5NjB1NJq8kctnvyN+eldPr/gq508NLagvH1wB0riL9ZY4zHIpB9xX2+DzGjiYc1Nnn1sPOGrMgkdqSOGSZ8Kv41aihjjUNKf+A0k1wXG2IbF9BWNSvd2iONFJXm/kO2wWyHcBI5HboKgRfMbdipIrcnlqtRQ4GMVyynY6I03O2lkRLb55qZIgO1TrGe1PCDOGHNYubOuNFIjXAGB1p67mOKlitmduBxVh2t7JN7kO+PuioctbI2ULK70RGLDcm9sKg6k1Sur+K2ZRacMOretQ3mqzXAK52r6CsqRjnNdeG54yTuefjKsJLlii3PdSTnLMarjNJn5aQZJwK9GUm3qeYhcHHNNA54p4QnrwPWpF+TO3Bz3rKc0hpCJGuNxP4UjgHIqaNCw6cU8wDGRXLKpd6lqJAqHbnHFPVdoyRxUoJXApxG5c4xis+YrlIsZGaVVBNTqA3HSrMdkH6dahzSKUWyrGzod0ZII9DXQW1zcXNoI2c7vXPNVrfTDvO9TgVqW9lIFzGuAO/auepVT0RtCFtWJaxCPgDLH9auKsSkiZsHsKcFNoyvkNx1qO9vYQQ0u2PuCaw9m5M0bstBnn+UxCLhT3JrPvtdhtYzDB88p9+BWRqmtyTfu42Hld2A61iyS7iCBz613U8P1kc063RFye/uZZt00mc1XkLXDhUU1Y03TrnU7hY44yxNd/pHhO10+FXuwzXDH5YlGWb8K6r2VkYb6nO6B4SnvJFeVMJ1Oa9I0HQDKVg0u33N0a4I+UfT1/lXSaD4MutTCPeJ5FqMYhXuP9o969M07SbbToVjhjVcDsKj1GYHh/wAGW+nfv58y3Dcs78k11iIqKFUYAp1FMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKa8ayKVYAinUUAcZ4l8DWuqDz4R5VwvKSJwQa871VbjTlNl4itWuLfot2q8j/AHh/Wvd6z9S0e11KBo5o1bI7ik4p7gfMXiLwEHgN/pLrNARuIU5xXCZn0+Yq6FXHqK+h9X8G6l4dne60VswMcyWx5Vvp6VyepeH9M8VRyPEgs9QX70EnBz7VKk4/FsLbY8+0rxHcwSAvKXXuDXf6RqVrf2+9H+f+7Xmms+Hr7Q7opIjcdwKZp+sy2cyMh2sp/Os6uGhVV46M2p1mtz2BYmuQU2AqOrGqF1pSAl42z61m6T42tjDtuCEkP5Grl94ihESbEDA8kivNnhpXs1ZnUprdFZ18vg8e1Z9xqKW5+Yggds1b+2xamNhIj7DPpWFqtsIw5U7wD1FRGhaVplOWmgt1rPmLiLIJHWsW5uXL7mYlu/NQNM6jGKYDvOeprvp0Yw2OaU2zQ0145ryNZThM85NdZ51kF2qycDpXJW9tld2ORVgwueQcH0rCtTU5bmkLpGyt2bG58+yuCjA5+U9a7Lw98QknmW21FRExOBJ2NcBBbFog2ec0ye2YrkdBXJWwlGuuWpv3LUpR1R7/AB3Mc6B43DKehBqXPy4rwzRPFWp6FKo8xpbYceWxr1TQvFFjrMP7twko6xsea+bxmW1cPrvHubwmpepv9BmnrIeKi3ZWlXpXmtFMthweDTsc1U3YNSLLjvU8pDj2JyKQDigOGFKeKkkYRzTQOaeeme9RMTTQwkAZcVWxjg9KnOajPXkVpEtMYQO1NxinOdqk4qPcGUGrQ0DHsKMimuwQbiQB6muQ8QeNrbTA8UBEsw4+U8Ct6NCpWlywVy0rnR395a2sDPcuqR45LV4x4x1iwv7rbp8Sqq9W9aqa14g1DWZiZ5W2dkB4FYhQmvrMty36s+eb1/Aicna0SqEMj5J5qVLcr2qZYcHNTKrDHGa9iU2ZU6K3ZGkZI96txQ4XNOhhLHpzV6G1Y5yQFHOTWEpnfSpFURsxAVatraRxL5lwwQYzg9TUdzqUFou2EbpB/F2rCur2a6Yszk0owlPyQqteFPzZfutV2K0cAwtZDTPITuJ5pAOOTTenGK6YQjHY82rWnU1kxGqBxk9aseWXIpr27itoNJnLUTtcj5JwKlRdjDK5py27jBAP1qykYK5xyKqdfsZKDZEY2IyenpSrGoxmrODtxmo5EOOetc7m2zTlsIpCnHapvlBJPT0qNEIGTUhVnOMVDKRGAC3FTRws7YAqxbacZXB6Ctq2s0t8MVPPesqlZR2NI029zJGnsD93rVm3gK8ckit2K2aYHYvy92rUgtLSGDjaXxksfWuf2kpI05UjNsbTeAzjgdquzySLGYEhHPoKjnvILJfMkO0D3rBuPFjziRIFMadN2ea2oUZTdkhTnGK1GX2sR2gaKSMtKPyFcxe3Lzt5krE56DNOvL1GY4O5ieSais7C51K4WONScn0rvjTjT23OOU3IqBWdgqAnPauq0HwhPqLK0w2J3zXQ6N4TtbCJJb3mU/djHLMfYV6Rong+61hke4iNtZjpCp5Yf7R/pQ5N7E2Ob0PQcsttpEAdxw1wR8q/T1NeoeHPBFvp+Li5zNcNyzvya6LS9FtdMgWOGJVwOwrSpWGNjjWNQqAACnUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBkkSSqVdQQa4rxN4EttS/0i2zDcrysicEGu4ooA8J1CDy/wDiX+JbXI+6l6Bgf8C9K898T+AZ7Em5siJbc/MCnPFfUuqaJaapA0c0StkdxXmOreFdT8OSNLpw8+yzl7V+Rj/Z9KzcWneIWPnIh4JdkikEHvW3Y6hDHDiZy69h6V32p+GtM8UCWSwU216n37eThgfb1rzTVdDv9FumjniYYPXFWpRmuWQRbi7o7jTGsr+EFMkgcgdaLiyhjDqJMn+5XFafrk1i5MQCsRg1pwas905MrBcHPFYToteaOiFVMsjRHuSTGvTrWdcWT2Up3qRjsa6bT7wDO6QAYyCTWlLpsGpr82WOOXrmlOUfQ05Uzj4ZQVHNP8wKc9TUt3pEtnM+0FkHQ1ReQKcHNCtLVBdrcs/aHLAg4X0qwLoYwSDxVEsCo9KjbAGRnNLkTDmaNMtFIBkcUtrM9rMJIpCjA8EGqdmzSyBADWsliXGH496ynaOjKXvanY6B472lbfUWJydok9B7139vdQ3MIkhkV0PQqa8SbT0WMqDkVZ03X77QJsQyGSEdYyeK8XFZZCr71DR9jVTcfiPZ885p2cgVzeg+LbHWU27vKnHVG4z9K6NTnoa8CrSnSlyzVmaqz1RIrkGphJkDNVjyaUHAxmsmriaLZOajYUxJMdak3Bh1qbWItYiIJFNIA5qcgYqpdXEVtGZJXCqOpNVG70RS1Gzf6o81zuo60mkXUbSuHgkUhkB5U9jWVr3jMYeGwGe281xFzcTXMnmSuzsfU17eDy2Uveq6I6qeGb1kbGv+LLvUFaK2Yxw+g6muNkR2Ys2ST1zWl5ZOahkQdD1r6HD04UY8sFY6HRRnNEB1qNocdKvshPBH40Lbk9s11KdiXRvsUo4ST0q7BaFiAFyatJbJCm+Zgij1qld6uEQx24Cr69zU80pu0RuMKavItSi3sl/fEF/7orFvtVlmJVflX0FVZp2kYlmJNRtjbz1NbQpJavc4a2JlJcsdEMJZu9IPlNG7jAp23dwPxrc4yI5J4p6KA3NPAVGwOSamjtmkkG5SBSckiXZeoxc78KM5qcW7NyauCKOIDpTDMOgFZOo38JLV/iIdm361E/A44qd2B5qHG40ITI0f5venkMeT0p4jGenNaVtp3moCxx9aUpqOoRi2UoLcykccVtQ2ECqCMk1ZtrKOKPHB4qcW7FgEAx61yTrOTsjaMEtWRwW6r90fpWnFaZUtIeB2x1qeySG0UPIu9uvNVbjUwGZ5SscYPGaUaTb1KbsakQhe2MX3cdhWHdX9rp8buz+bIM7VHQVhanr8s+6O2G1TxkVzdxM6thpCxr0aWGsuaa+Ry1K62iaF5qr3dwZ523J2Wsl5XlkPlgjPYVJZ2F1qE4jhQsT6V3+ieEINPRbnUBkk4VOpJ9AO9dLmkrI57t7nOaH4PvNSYSyKVj65Nek6LoiIVtdKthLMOHmK/Kv+JrodD8JXushPNiNrZf8APMdWHuf6V6hpOg2elW6xwxKMDsKz1e47HN+HPA0Nmwur399cEcsw/l6V20USRIFRQAKf0opjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApksSTIVdQQfWn0UAcF4m8AwX7fa7PMF0nKSR8EGuE1ADB07xZbd9sd8i8f8C9K9461k6voFnq1u0c0StkdxUyipbgfLnin4fXGnFrqxImtW+ZXQ54ri45JLNyjp16g19F6l4c1Twuz/Yk+16cxy9q/OP8AdPb6Vx2teEdL8S2zXWkYhul/1tu3DKfpSU3B2kKx5zZanGjfOcqeAPSu407XYvsyomCAMfKOa881PR7vSLgxzxspB7inadd+SfvlTROkqmsTSFW256Hd3ccsG1FxnrnvXN3lkHJIB3nsBW3otzY3UKRzuBOT3PUVpy2MNvchjtMR9TXBZwk01Y6tJI4OOKQnyypyD6Vcj0+RyMrgetdu9pYPGQPKjx0PrWFdEwswX5hjqO1ZSqyvaw1FFeKO3swGOM+pqY6hET8uTWTcs0uSx+gqoSV79KSo82rY3K2xtS3zNlRwKrDk4NZou/nwx59asRF3+ZTkGr9lyk89y99naPEkZKOvII611ug+O57PFvqoLpwFkA6fWuUgMu3ay1YeFHXaQM1y16VOtHlqq5autYns1pf299CstvKrow6g1ZJ4rw6w1G+0Kcy2cpKn+Anj8q9F0DxpZaqqQynybnoVbgH6V89i8sqUffhrE1jUT0e51vb1pN5oVlK8c01sZrzDSw6a4MUDP1wM15PrOu3Op3brJIRGDgKK9Nvj/oM3P8Jrw+9nZbtyOzGvbyahGblJrVHTh1GN2zR8vP5UxoznjpVSHUCcBq0YXWdeOte3JSjuelTUZbFV1YCoRDubJrSaDsTzTXWC3QvM4GO3c01U7A6fVleO23fw8dyar3d5b2X3CHfH5VX1DXGkXyoFCJ3x3rAmlLnk5rppUXLWRx18VGGkCxc30lw5JYkGqTZJ56UBx0phJJ5rsjFLRHk1Kjk7tiuR2pF+bilEZb6VJGoU4A5qjP1GrFjk08xZwBUgidj0q5DEv8Q5rOU7EuXNotiGGz8sbmXmppJQgGOtSPgHrxUDgE4zmsk+Z6itZaDHfd3qPb3qTB3bcCl29Kq9hbjQmetSRwb5QACc+lT29v5sgWtu3to4RwoBPfHNZVKqiUoXIU0+3VAdpzjvVkQYICg5qxb2Ut1LhQAo5JPStBLZLflSrN71ze9Lc10RXs9MeVlMhIU9h3qxqQFmoRU78VMdStbeAtMwjZRxk1xmueJTcOwtyQvTeepropUZSaUUZyqKOrNdtat4eXYF16LmuZ1nVWvpC0nCdgKwppi7liTu+tPt7a5v5ljhVnJ7V6VOnGn01OSpUcxDM7DbHnHatzRPCl5qriRkIj7sa6LRvB8NhGl3qJHXiPHJP0r0bQ/C99rIVBGbSw/uAYZx7+lNzvsZ2Oe0XRY7WUWmlWonuRw0pHyIfr3+lemeHfAqQut5qDGe4Pdu3sB2rpdG8O2WkW6xwxKMDsK2cYqUiiOGCOBAqKAB6VJRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAI5oI50KuoIPrXCeI/AiTy/btOY292nKunB/H1rv6MZoA8E1OKG7Yad4nsxHcH5UvFXCMff0rzvxL4EudKZp7fEtueVZORX1NrPhyy1i3eOaJWyMcivMdQ8Oan4WeQW8RvdMc/PbPyQP9k1HK4/CJo+formezk7gj1rZsdbm2HzZGk9MngV3GteDtN8Q2jXmjMFmH37duHQ+4rzS+0290e4ZJUZcHuKpSjU0kCk47HWW8730hMbcDB25q/bxuZNjjAbrnrXB2OqS21yJFfa1dnY61BfQ+Ww8qTpv9a5qtFr0OmFVS33JL/SQozG4L/wB0Vz8qOhKsMV0bwv8AI6sXQ8bqluLKBgN6AqR1xzXNrHY1epyBtWY5CGtKxKxqA3Udq1GslRcp8y+1ZF7E0OW6elT7T2nuhy8upr+YuBg9aqzXI3YB6VmQXUzR4z7ZprxSt8xzSVKz1Hz3WhofagwC96DEGberEOOQVPeswMQOc1ZhudnQ03C2wr33Ou0HxpeaUFt73MsHTeeor0iw1S11K2We3kDIRnryK8RZxKmWxk1JY6jeaRP5tpKQO69jXl4rLIV/ehpL8GaxqOO+qPbNQbGnzHP8Brwm8b/S5R/tV6JY+NrTU9Pliu2ENwEPB6GvPropNMzp69qWU0KlBzjUVjuotSjeJWBwauWN95JINUn4qEMQSa9mUVJWZvGo4SujbuNVMcfyD5j1JrAubyWZzucmrEzbohzWeRzVUqcYmOJrSk7XGsxHNQ43HrU5xnpmmhMOMjrXQjhkrkaId9TrCGfA5qytmAN0h2D0pYrf5iTwvak5JasxcktIkYiyuF5PrVmKzEfzMATUoCqox/Khnx0OawlNvYVtbsbjDYFIxx9w80pO4c1E6c5HWkgY5W3DmgqD0FOVTjHepY1x160XsCVyu0fIOackR3ZPNaS2Kvg5q7a6T52Ag/E1n7VbIpQEsbaPy1IQ7jWstixKhxj2qayjhtNyuu5h6etE+oQQfvZn2gdjWcaV3dlXsh0iTW8YwMr7Vh6p4igsGZcbpOnB6Vlat4snklMUGVj6Vzl5MHQliDI3WvRpYRP3pnNOvbSJZvb+S6kEksp2n+GsySbcxCDg0sFvPduEjVmJ9K7vQPBaQIl7qjBIxztPeurmUVZHM7t3ZzWi+GLvVZA2wrFnljXpekaHBYvHa6ZbLc3eMO2PlQ+5/pXQaL4bu9XCxW0LWdhnrjDuP6CvUND8MWWj26pFEoIHXFZ7jSOY8O+Awsi3upHzp+oyOF9gO1d/Bbx28YSNQAPSpQABgUUxhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVFPbx3CFJFBB9alooA878R+Ag05v8ASnNtdryHTv7H1FcNf2trqLf2f4ktxbXhOEuQMI/+Br30gEYNYWueGbHWbd45oVOR3FS4pgfLHijwJeaPIZoV8y3PRl5FcxBcyW0mHB47GvoLVdF1bw0jQ+Ub/Ss8wvyyD2NcTq/g7TdetZLzRnAmXl4W4ZT6YpKbjpIRylhr0u9c8xDqpNdMkzXtiWiUsfQV59d6fd6VcGKaNlKnnIrQ0/WJIY9iSsvtng1NShGavHc1hVa0Z21pOLdDFIu3dwfeq17pbXqO0YyFrMi143xWFlCgfxetb1rIyOFDltwGQO1cVWnyu70Z0xldaGDHZCD5GTDDtS3ClUPHWuoltYp8kD5z3FYl/Y3Ebcg7e3Fc6k76l9NDBdSvXGDURBB46VbeIhiDUJjIbmuhMzaHwuCQCatBAQMkGqawuenA9TUwLRpkN0qZLXQa2EuLVT3x+NVE325xnK1aNxvyGNMKq0ZzVxbtaRUZOD5oEZdXY4NJgFTUEkTqcr2pbW4w2yUfjWjjpdHbRxMZu0tGPc/IBiqxQs3HStG4jGQF7+lRm2IG4nv90dacNVcWIcYOzZXjti2cY471YECN8qLk92qxJB5jrhdiYxgVeijVI+KidZJe6cT5pvXYqx2WVBclj6mhrba2Qau7iM5/CjYW5Gc1zuo+o+VFBkUcHrUZUAg1eliwvPeq8iFAMjmqUriaItmG9jSNFzUoBfBI5p6ws796fNYLFdYWZsZ/GrMVsSwB5q/HZlgAo/GtGGCK3Tc2S49qjn5irJC6fpyg5mGz0zW3HHCsWcDA9Kw59XgjbNyzKB6VzWpeJpJZDb2bssbcE561tSoSm9CJ1FHc3tU1q1sXk8tQ8nIAz3rh9Q1e5u7jfMduOgHSobi42Ftz7mzVSOOe8kCopYk8ACvRhRhS82ck6rmOnuPMUIi855Naei+GbzWJRhSsfdmrpNB8GRQqt1qbqi4ztavQtE8PXur7YbSE2lkP48YZx7en86cptmdjn9G0K20t1tbG3+2Xp6n+Ffqa9L8PeBXkkS81VvNlHKrjCr9BXTaD4UstGgVUiG7uSOSa6EAAYAwKm3cohtrWK1jCRoAB6VPRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAIbi1iuYykiBgfWvPPEfgAi4Oo6Q5t7teQyd/YjuK9JpCARgjigD5/wBRt7fVmOn69apaX3RJ+iSn69q868R+C7zSGaSNd8PZl5FfU2veFbHWrd0lhUkj0rzLUNG1LwwHt5oWv9KJ5QjLoPY96z5XHWIrHz+tzJE20kitbT/EMttcLzuTocnrXca/4IsdWtWvtEcOOpTuvsRXmN7ptxp85jmQqQapuNRWY1Jxeh6xp17a3UKyRzI74yUB6UurmUpuyAuPyryzT76SzlDJIy/SuiPiGXUI1hbKqOp9a4KmEcXpsdUKqe+5JMAcspJbuKgEyLgtV6OAvGrRAMv8XNVLy3WVsBQg/hApqFx8xE9wpYbOlRPKzZxwPSoDHJbSbJAadv3dqfKlsJO4IcvitCCDeBms5VfzcmtezSQgHB9qmo7IqKGvbKEIA5qlJajpjmtrYdpJ6+1VZIPnznrWUKljRxuUo1dMHPI6GrdsqKSTyT1JqMqQcHmnxjacHoauc3JWElrdlpyhI4xSK2O2fek4KjNKDs+lYWKHZ6+n0pFPcGkV854oJxjmgBx5GW5NQyqGbNPyew4q5ZWEl3KAM49aewFeKPeAiJk1pW+nnIEhA/pU4g+xSjYhBHrUlzdBIvOuGCIKnVvQLiND5TjaQAD1qprWuWljb7AqmY+/eub1bxNM4eO0+WP++eprlpZmnJeRyzepNd1HCdZnNOvbRGhqV7c3b+ZLICOwHSs95ycbBikijluGEcalifSu20DwWAn2rU2EcQG7BNd91FWWhzO71Zzuj+H7zWJ1VVIQnliK9E0nQLXTSttbW/2q+P8ACvRfqe1dDofh+61QLb6dA1tZ55mIwzj29K9S8PeELHRYF2xgv1LHkk1Duwscv4e8ByTyJeas3mOOVTHyp9BXo1rZw2kYSJAoHoKnChRgDApaYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKgubSG6jKSoGB9anooA801/wLLa3D6ho0hgn6sAPlf2I71w2oadp+tTfYtVtvsN/j7x+459jX0GQGGCM1zniDwlY61bsskS7uxxyDUyjcLHyz4j8F3ujStIELQ54IFc6txLH8hG09M19BX+nahoG+11OF9Q0tujHl4/8AEVw/iLwJBewNf6LIksR5IXqPakptaSJ1Rxek3E6yiMygRnqx6Vuvd28IKoQ5P8WP5Vx11a3VhKY5VdCOtLa3JV+WJHoTSlSUtUawqW0Z0MUf2m6JlfCnnmprnTGC+bbruUnoKr6ffxOR5igMemelbMUN0+0hisLc4HcVzyi7m0WrGJFCfN+fgitaCXCYA6VbexjbIZMY/iFVZYRbkAsCvqK5amu5tFWLAfKj6elVJziQdcGla4G0FSOKQMJAT+VZpWKuNKk9uKjljZeRn8qtQD+8R9KsGENHnihzswsZkQcY64PQ1OQQvrmlMZViDUgMYjGSMim2nqgSGKmAN2aUKzNhVzz6VYit3ueFGB6mtGC1WAhVG6T9aai92DKsNhgKZSVz0GK0YW+yODEMqO5ouEFvbmaaRcKM4zXK6l4iF1E1tagof4mz/KtaVGU3aJnKoorU3b/xHZW+/wC0OJJscADpXC6trE19LnzMRk52g1TvJ4ywH3mx8x96qRxSTyBEUsx6ACvRpUo09tzknUctBXndl2DkVqaJ4cvNYnCxqQnUsa6HQPBHmRfbNSYQwjn5uK7/AETQ7nUitvpMDW1r0acjlvp/jVSl0RFjn9I0C00phBDF9qvSeEUZx9T2r0vw/wCBZ7147rVcEDlYVGFX/Guo8OeDLLRoQfLDSnlmbkk+5rqlUIMKMClbqxlazsILKIRxIFA9BVqiimAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAVruygvIikqBgfUV53rfgm506d77RZPKcnLxYyj/UV6bSMoYYIyKTV9wPn/VdI07xKHtrm3+w6oo+43Cuf9k968t1/wAJX+iSnfGSmeoFfVniHwfZazCSYwsg5VhwQfUGvPdSsbvTA1nrcBurI8LcBctH9fX61FnD4RWPnlJ2WRQxPy10ul67LCmJHLx/3TXQ+J/h5iH7fpbpNA3IKHNeeSw3FjIUkUqRxzWl4VFZjjJxeh6db61bX1qoEa70/hH9aiuIEuxiNAm7ksa4LTLwwT71fHqDXYaZr9td4gm+Ujpjua5KlGUdtjphVUl5kEuntGjcjcP4c1Wh83zNmO9dFHpzXe50kCDuTTv7PiifZGQW9T3rlqtR2NkZMcZBBJ5qypBXaeKS8RrY7SPm9fSqcQnll+RScck44rnUXPUpuxoeWGbaF3VHHpeHLTNgjoM1rac0Cxnco3f3jTpIIo0aWZh5YGRW1KDiyXIqWxYEheAM8jpTf7asrFnEjGSXHCj/ABrD1bxKrB4LJRGnQsK5O5uWE29W5PvXfTwjvzVNjCdfS0TZ1XW5r+UszlY+gT0rAmuBuwmc+tMUTXcuxFLE9AK6/QfA8k6i5vT5ca8kNxXW5RirLY5r3epz2l6Be6vOFhjOD1JHFeh6R4estG2IIzc37cqijOPr6V0GjaTc35W10eERwYw1xt6/7v8AjXp/hvwRZ6RGJHTfM3LO3JJrO7YWOW0DwNd6nIl1rB+UcrAvCr/jXptjptvYQrHDGFAHYVaRFRcKMCnU7DCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqreafBexGOVAwI7irVFAHmer+Eb3SJHudIb90xzJbN9x/wDA+9cVq3hzSvEqSRrGLPURnMEnBz7eor6AZQ4wwyK5bxB4OtNVTzEXy515V04IPsalwT1QHyhrnhq+0Sd0eJtqnggVm2195EisyfMvQ19CalZvbA2HiG282A8LeqvI/wB4f1rzvxX8OZLVPtun4ltnG4MnINEalnaROxh2Pih3CxuhJHRs9K2odUjnkGxvm7kGvPnSexmwykEHoalgvpI5d6sRz0qZ4eMtUbwrNaM9BeeN32TOSncipEuf3jR27DyumDxWBo2oRXeRLkFfyo1TV4/LeO1AVgfvDrXMqMm7RRq6kbXNPUtUi06LcxBlJwFBrldQ16+uAQ8hEZ52g1nPcs7lpmLnsc1ATJcy4ClieABXXToxprzOedVyEe5LNuHBNXtJ0i71a4CRITnvXRaB4Ie5jF1f/uoRzzXe6RpUt5ItroVsEiA2tclf5etU59ERYyNJ0HT9B2B4jc3zdI05P/1q9B0PwVeaxIk+pjy7cHK26/dH19a6bwz4EtNLUTTL5tw3LO/JJrtEjWNQqgACpS6sZS07SrbToVjhjVcDsKv0UVQBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBTvtNt7+Fo5o1YEdxXA6h4avtBeSXTVE9o+fMtJPun3Hoa9KprorrhhkUmk9wPn7XPCOmeJIJpbBPIvIxl7aQYZT/Ue9eQ6roV5pVwySxNhT1xX1rr3g63vyLi2zDcpykicEGuC1nTI52+yeILdY3+6l6owp/wB4dvr0+lTrH0Jt2Pnu0u5IJSwYqCO1E10WBAOSe9dj4q8C3GmTNJAN8R5Vl5BFUfD/AIMuNQPnXIMcCnknitFNWA5/TdJu9TuFjhjJBPJ9K9K0fw1Y6GqPcr510w+WMDLE+wrb0bSvmFnodsHPR7gr8o+nrXpfhrwHb2BFzd5muW5Z35NS25DscroXgu+1t1m1IeVa5ytuvTHv616lpmjWumQLHDEq4HYVfjiSJAqKABT6aVhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAVR1DSrbUYWjmjVgR3FXqKAPMtR8J32msyWYFxZtnNvJyF/3T2rO0/wRqGpThLwCCzB/1Mf8X1NeukA9QDQFUdABS5Ve4GXpOhWelQLHDEq4HYVq0UUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//Z\"}]}"},{"id":3102,"title":"Rumis Scorer 4","description":"This problem is very similar to \u003chttps://www.mathworks.com/matlabcentral/cody/problems/3101-rumis-scorer-3 Rumis Scorer 3\u003e. The main difference with this problem is that the board will not be completely filled in. In other words, the maximum heights designated by the stencil will not necessarily be occupied. Write a function to count the squares visible when viewed from above to determine who won each round (the stencil may or may not be helpful). See the test suite for additional examples (including test cases 1 and 2, which represent the completed boards shown below).\r\n\r\n\u003c\u003chttp://www.exodusbooks.com/Samples/Games/RumisPisacBig.jpg\u003e\u003e\r\n\r\n\u003c\u003chttp://cf.geekdo-images.com/images/pic1111321_md.jpg\u003e\u003e","description_html":"\u003cp\u003eThis problem is very similar to \u003ca href = \"https://www.mathworks.com/matlabcentral/cody/problems/3101-rumis-scorer-3\"\u003eRumis Scorer 3\u003c/a\u003e. The main difference with this problem is that the board will not be completely filled in. In other words, the maximum heights designated by the stencil will not necessarily be occupied. Write a function to count the squares visible when viewed from above to determine who won each round (the stencil may or may not be helpful). See the test suite for additional examples (including test cases 1 and 2, which represent the completed boards shown below).\u003c/p\u003e\u003cimg src = \"http://www.exodusbooks.com/Samples/Games/RumisPisacBig.jpg\"\u003e\u003cimg src = \"http://cf.geekdo-images.com/images/pic1111321_md.jpg\"\u003e","function_template":"function [winner] = rumis_scorer4(board,stencil)\r\n\r\nwinner = '';\r\n\r\nend\r\n","test_suite":"%% first board shown above\r\nclear board stencil\r\nstencil = [\r\n\t1 1 1 1 1 1 1 1;\r\n\t2 2 2 2 2 2 2 2;\r\n\t0 3 3 3 3 3 3 0;\r\n\t0 4 4 4 4 4 4 0;\r\n\t0 0 5 5 5 5 0 0;\r\n\t0 0 6 6 6 6 0 0;\r\n\t0 0 0 7 7 0 0 0;\r\n\t0 0 0 8 8 0 0 0;\r\n\t];\r\nboard(:,:,1) = ['bbbbyyyy';'bbrryyyg';' bbrryy ';' bbryyg ';'  bbgg  ';'  bbbg  ';'   yy   ';'   yb   '];\r\nboard(:,:,2) = ['        ';'bbrryyyg';' brryyg ';' brrygg ';'  bbrg  ';'   bbg  ';'   by   ';'   yy   '];\r\nboard(:,:,3) = ['        ';'        ';' brry g ';' bbrygg ';'  brrg  ';'   brg  ';'   br   ';'   bb   '];\r\nboard(:,:,4) = ['        ';'        ';' b      ';' bb ygg ';'  bryg  ';'   rrg  ';'   rr   ';'   br   '];\r\nboard(:,:,5) = ['        ';'        ';'        ';'        ';'   ggg  ';'   ggy  ';'   gg   ';'   rr   '];\r\nboard(:,:,6) = ['        ';'        ';'        ';'        ';'        ';'   gyy  ';'   gr   ';'   gr   '];\r\nboard(:,:,7) = ['        ';'        ';'        ';'        ';'        ';'        ';'   gg   ';'   gr   '];\r\nboard(:,:,8) = ['        ';'        ';'        ';'        ';'        ';'        ';'        ';'    r   '];\r\n%yellow wins 12 to 11 (g,b) to 6 (r)\r\nassert(isequal(rumis_scorer4(board,stencil),'y'))\r\n\r\n%% second board shown above\r\nclear board stencil\r\nstencil = [\r\n\t2 2 2 2 2 2;\r\n\t3 3 3 3 3 3;\r\n\t4 4 4 4 4 4;\r\n\t5 5 5 5 5 5;\r\n\t5 5 5 5 5 5;\r\n\t5 5 5 5 5 5;\r\n\t5 5 5 5 5 5;\r\n\t4 4 4 4 4 4;\r\n\t3 3 3 3 3 3;\r\n\t2 2 2 2 2 2;\r\n\t];\r\nboard(:,:,1) = ['rrrrbb';'ggrbbb';'ggrrpb';'ggrpbb';'grrppb';'oorrpb';'ooppbb';'ooybbp';'ooyypp';'yyyypp'];\r\nboard(:,:,2) = ['grrr b';'ggrbpb';'ggrrpb';'rrrbpb';'grbbpp';'ooobpb';'ooyyyb';'oooyyb';'oooypp';'yyyypp'];\r\nboard(:,:,3) = ['      ';'ggrbbb';'ggrrpb';'rrrbbb';'grpbbp';'grppbb';'gyyypb';'ogoypb';'ooo pp';'      '];\r\nboard(:,:,4) = ['      ';'      ';'ggrrpb';'rrrbpb';'grpbpp';' rbbbb';' yyybb';'ogoypp';'      ';'      '];\r\nboard(:,:,5) = ['      ';'      ';'      ';'rrrbbb';' rpppp';' r  bb';' y y b';'      ';'      ';'      '];\r\n%blue wins 15 to 11 (r,p) to 9 (y,g) to 5 (o)\r\nassert(isequal(rumis_scorer4(board,stencil),'b'))\r\n\r\n%%\r\nclear board stencil\r\nstencil = [\r\n\t1 2 3 4 4 4 4 4;\r\n\t1 2 3 4 4 4 4 4;\r\n\t1 2 3 4 4 4 4 4;\r\n\t1 2 3 4 4 4 4 4;\r\n\t0 0 0 0 3 3 3 3;\r\n\t0 0 0 0 2 2 2 2;\r\n\t0 0 0 0 1 1 1 1;\r\n\t];\r\nboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\nboard(:,:,2) = ['  brbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brb ';'        '];\r\nboard(:,:,3) = ['  brbbrr';'   bbbbr';'  rbbrbr';'   brrrr';'    bb r';'        ';'        '];\r\nboard(:,:,4) = ['   rbbr ';'   rbbbr';'   brrbr';'   rbrr ';'        ';'        ';'        '];\r\n%red wins 25 to 19\r\nassert(isequal(rumis_scorer4(board,stencil),'r'))\r\n\r\n%%\r\nclear board stencil\r\nstencil = [\r\n\t1 1 1 1 1 1 1 1;\r\n\t1 2 2 2 2 2 2 1;\r\n\t1 2 3 3 3 3 2 1;\r\n\t1 2 3 4 4 3 2 1;\r\n\t1 2 3 4 4 3 2 1;\r\n\t1 2 3 3 3 3 2 1;\r\n\t1 2 2 2 2 2 2 1;\r\n\t1 1 1 1 1 1 1 1;\r\n\t];\r\nboard(:,:,1) = ['yyyyybrr';'yyrrbbyr';'yryyyrrr';'yryyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yyrrgggb'];\r\nboard(:,:,2) = ['        ';' r yb b ';'  yyybb ';'  rygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\nboard(:,:,3) = ['        ';'        ';'  ggy   ';'  gb r  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\nboard(:,:,4) = ['        ';'        ';'        ';'   b    ';'   b    ';'        ';'        ';'        '];\r\n%red wins 19 to 16 (y) to 15 (g) to 14 (b)\r\nassert(isequal(rumis_scorer4(board,stencil),'r'))\r\n\r\n%%\r\nclear board stencil\r\nstencil = [\r\n\t0 0 0 0 1 0 0 0 0;\r\n\t0 0 0 1 2 1 0 0 0;\r\n\t0 0 1 2 3 2 1 0 0;\r\n\t0 1 2 3 4 3 2 1 0;\r\n\t1 2 3 4 5 4 3 2 1;\r\n\t0 1 2 3 4 3 2 1 0;\r\n\t0 0 1 2 3 2 1 0 0;\r\n\t0 0 0 1 2 1 0 0 0;\r\n\t0 0 0 0 1 0 0 0 0;\r\n\t];\r\nboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' obbbppp ';'obboopppo';' oobbbpp ';'  ooooo  ';'   opo   ';'    o    '];\r\nboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'    bbp  ';'  obbppp ';'  obbbp  ';'   bbb   ';'         ';'         '];\r\nboard(:,:,3) = ['         ';'         ';'    b    ';'    bb   ';'  o bbp  ';'     b   ';'         ';'         ';'         '];\r\nboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'    o    ';'         ';'         ';'         ';'         '];\r\nboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n%blue wins 17 to 16 (o) to 8 (p)\r\nassert(isequal(rumis_scorer4(board,stencil),'b'))\r\n\r\n%%\r\nclear board stencil\r\nstencil = [\r\n\t2 2 3 3 3 3 2 2;\r\n\t2 2 4 4 4 4 2 2;\r\n\t3 4 5 6 6 5 4 3;\r\n\t3 4 6 7 7 6 4 3;\r\n\t3 4 6 7 7 6 4 3;\r\n\t3 4 5 6 6 5 4 3;\r\n\t2 2 4 4 4 4 2 2;\r\n\t2 2 3 3 3 3 2 2;\r\n\t];\r\nboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\nboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bgyyyggg';'byygyygg'];\r\nboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';' gyybo  ';'  oyb   '];\r\nboard(:,:,4) = ['        ';'  yybp  ';' robop  ';'  gbboo ';' boybo  ';' rbggpp ';'  ybbo  ';'        '];\r\nboard(:,:,5) = ['        ';'        ';'   boo  ';'  ggbb  ';'  oyyy  ';'   ppp  ';'        ';'        '];\r\nboard(:,:,6) = ['        ';'        ';'   oo   ';'  g bb  ';'  ooyy  ';'    p   ';'        ';'        '];\r\nboard(:,:,7) = ['        ';'        ';'        ';'    o   ';'   oy   ';'        ';'        ';'        '];\r\n%orange wins 12 to 11 (y,p) to 10 (r,g,b)\r\nassert(isequal(rumis_scorer4(board,stencil),'o'))\r\n\r\n%% anti-cheating case\r\nind = randi(6);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t2 2 2 2 2 2 2 2;\r\n\t\t\t0 3 3 3 3 3 3 0;\r\n\t\t\t0 4 4 4 4 4 4 0;\r\n\t\t\t0 0 5 5 5 5 0 0;\r\n\t\t\t0 0 6 6 6 6 0 0;\r\n\t\t\t0 0 0 7 7 0 0 0;\r\n\t\t\t0 0 0 8 8 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['bbbbyyyy';'bbrryyyg';' bbrryy ';' bbryyg ';'  bbgg  ';'  bbbg  ';'   yy   ';'   yb   '];\r\n\t\tboard(:,:,2) = ['        ';'bbrryyyg';' brryyg ';' brrygg ';'  bbrg  ';'   bbg  ';'   by   ';'   yy   '];\r\n\t\tboard(:,:,3) = ['        ';'        ';' brry g ';' bbrygg ';'  brrg  ';'   brg  ';'   br   ';'   bb   '];\r\n\t\tboard(:,:,4) = ['        ';'        ';' b      ';' bb ygg ';'  bryg  ';'   rrg  ';'   rr   ';'   br   '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'        ';'        ';'   ggg  ';'   ggy  ';'   gg   ';'   rr   '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'        ';'        ';'        ';'   gyy  ';'   gr   ';'   gr   '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'        ';'        ';'        ';'   gg   ';'   gr   '];\r\n\t\tboard(:,:,8) = ['        ';'        ';'        ';'        ';'        ';'        ';'        ';'    r   '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'y'))\r\n\tcase 2\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 2 2 2 2;\r\n\t\t\t3 3 3 3 3 3;\r\n\t\t\t4 4 4 4 4 4;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t4 4 4 4 4 4;\r\n\t\t\t3 3 3 3 3 3;\r\n\t\t\t2 2 2 2 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrrrbb';'ggrbbb';'ggrrpb';'ggrpbb';'grrppb';'oorrpb';'ooppbb';'ooybbp';'ooyypp';'yyyypp'];\r\n\t\tboard(:,:,2) = ['grrr b';'ggrbpb';'ggrrpb';'rrrbpb';'grbbpp';'ooobpb';'ooyyyb';'oooyyb';'oooypp';'yyyypp'];\r\n\t\tboard(:,:,3) = ['      ';'ggrbbb';'ggrrpb';'rrrbbb';'grpbbp';'grppbb';'gyyypb';'ogoypb';'ooo pp';'      '];\r\n\t\tboard(:,:,4) = ['      ';'      ';'ggrrpb';'rrrbpb';'grpbpp';' rbbbb';' yyybb';'ogoypp';'      ';'      '];\r\n\t\tboard(:,:,5) = ['      ';'      ';'      ';'rrrbbb';' rpppp';' r  bb';' y y b';'      ';'      ';'      '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'b'))\r\n\tcase 3\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t0 0 0 0 3 3 3 3;\r\n\t\t\t0 0 0 0 2 2 2 2;\r\n\t\t\t0 0 0 0 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\n\t\tboard(:,:,2) = ['  brbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brb ';'        '];\r\n\t\tboard(:,:,3) = ['  brbbrr';'   bbbbr';'  rbbrbr';'   brrrr';'    bb r';'        ';'        '];\r\n\t\tboard(:,:,4) = ['   rbbr ';'   rbbbr';'   brrbr';'   rbrr ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'r'))\r\n\tcase 4\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['yyyyybrr';'yyrrbbyr';'yryyyrrr';'yryyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yyrrgggb'];\r\n\t\tboard(:,:,2) = ['        ';' r yb b ';'  yyybb ';'  rygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\n\t\tboard(:,:,3) = ['        ';'        ';'  ggy   ';'  gb r  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\n\t\tboard(:,:,4) = ['        ';'        ';'        ';'   b    ';'   b    ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'r'))\r\n\tcase 5\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t1 2 3 4 5 4 3 2 1;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' obbbppp ';'obboopppo';' oobbbpp ';'  ooooo  ';'   opo   ';'    o    '];\r\n\t\tboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'    bbp  ';'  obbppp ';'  obbbp  ';'   bbb   ';'         ';'         '];\r\n\t\tboard(:,:,3) = ['         ';'         ';'    b    ';'    bb   ';'  o bbp  ';'     b   ';'         ';'         ';'         '];\r\n\t\tboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'b'))\r\n\tcase 6\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\n\t\tboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bgyyyggg';'byygyygg'];\r\n\t\tboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';' gyybo  ';'  oyb   '];\r\n\t\tboard(:,:,4) = ['        ';'  yybp  ';' robop  ';'  gbboo ';' boybo  ';' rbggpp ';'  ybbo  ';'        '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'   boo  ';'  ggbb  ';'  oyyy  ';'   ppp  ';'        ';'        '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'   oo   ';'  g bb  ';'  ooyy  ';'    p   ';'        ';'        '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'    o   ';'   oy   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'o'))\r\nend\r\n\r\n%% anti-cheating case\r\nind = randi(6);\r\nswitch ind\r\n\tcase 1\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t2 2 2 2 2 2 2 2;\r\n\t\t\t0 3 3 3 3 3 3 0;\r\n\t\t\t0 4 4 4 4 4 4 0;\r\n\t\t\t0 0 5 5 5 5 0 0;\r\n\t\t\t0 0 6 6 6 6 0 0;\r\n\t\t\t0 0 0 7 7 0 0 0;\r\n\t\t\t0 0 0 8 8 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['bbbbyyyy';'bbrryyyg';' bbrryy ';' bbryyg ';'  bbgg  ';'  bbbg  ';'   yy   ';'   yb   '];\r\n\t\tboard(:,:,2) = ['        ';'bbrryyyg';' brryyg ';' brrygg ';'  bbrg  ';'   bbg  ';'   by   ';'   yy   '];\r\n\t\tboard(:,:,3) = ['        ';'        ';' brry g ';' bbrygg ';'  brrg  ';'   brg  ';'   br   ';'   bb   '];\r\n\t\tboard(:,:,4) = ['        ';'        ';' b      ';' bb ygg ';'  bryg  ';'   rrg  ';'   rr   ';'   br   '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'        ';'        ';'   ggg  ';'   ggy  ';'   gg   ';'   rr   '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'        ';'        ';'        ';'   gyy  ';'   gr   ';'   gr   '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'        ';'        ';'        ';'   gg   ';'   gr   '];\r\n\t\tboard(:,:,8) = ['        ';'        ';'        ';'        ';'        ';'        ';'        ';'    r   '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'y'))\r\n\tcase 2\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 2 2 2 2;\r\n\t\t\t3 3 3 3 3 3;\r\n\t\t\t4 4 4 4 4 4;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t5 5 5 5 5 5;\r\n\t\t\t4 4 4 4 4 4;\r\n\t\t\t3 3 3 3 3 3;\r\n\t\t\t2 2 2 2 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrrrbb';'ggrbbb';'ggrrpb';'ggrpbb';'grrppb';'oorrpb';'ooppbb';'ooybbp';'ooyypp';'yyyypp'];\r\n\t\tboard(:,:,2) = ['grrr b';'ggrbpb';'ggrrpb';'rrrbpb';'grbbpp';'ooobpb';'ooyyyb';'oooyyb';'oooypp';'yyyypp'];\r\n\t\tboard(:,:,3) = ['      ';'ggrbbb';'ggrrpb';'rrrbbb';'grpbbp';'grppbb';'gyyypb';'ogoypb';'ooo pp';'      '];\r\n\t\tboard(:,:,4) = ['      ';'      ';'ggrrpb';'rrrbpb';'grpbpp';' rbbbb';' yyybb';'ogoypp';'      ';'      '];\r\n\t\tboard(:,:,5) = ['      ';'      ';'      ';'rrrbbb';' rpppp';' r  bb';' y y b';'      ';'      ';'      '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'b'))\r\n\tcase 3\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t1 2 3 4 4 4 4 4;\r\n\t\t\t0 0 0 0 3 3 3 3;\r\n\t\t\t0 0 0 0 2 2 2 2;\r\n\t\t\t0 0 0 0 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rrbrrbbr';'rbrrbbrb';'bbrrbbrb';'rbrrbrbr';'    brbr';'    rrbr';'    bbbr'];\r\n\t\tboard(:,:,2) = ['  brbbrb';' rrbbbbr';' brbbrbr';' brbbrbr';'    rbrb';'    brb ';'        '];\r\n\t\tboard(:,:,3) = ['  brbbrr';'   bbbbr';'  rbbrbr';'   brrrr';'    bb r';'        ';'        '];\r\n\t\tboard(:,:,4) = ['   rbbr ';'   rbbbr';'   brrbr';'   rbrr ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'r'))\r\n\tcase 4\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 4 4 3 2 1;\r\n\t\t\t1 2 3 3 3 3 2 1;\r\n\t\t\t1 2 2 2 2 2 2 1;\r\n\t\t\t1 1 1 1 1 1 1 1;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['yyyyybrr';'yyrrbbyr';'yryyyrrr';'yryyrrrr';'yyyrrrbb';'yrrrrbbb';'yyrrrgbb';'yyrrgggb'];\r\n\t\tboard(:,:,2) = ['        ';' r yb b ';'  yyybb ';'  rygrr ';' ryyggr ';' ggygrr ';' ggyggb ';'        '];\r\n\t\tboard(:,:,3) = ['        ';'        ';'  ggy   ';'  gb r  ';'  ggbr  ';'  ggrr  ';'        ';'        '];\r\n\t\tboard(:,:,4) = ['        ';'        ';'        ';'   b    ';'   b    ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'r'))\r\n\tcase 5\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t1 2 3 4 5 4 3 2 1;\r\n\t\t\t0 1 2 3 4 3 2 1 0;\r\n\t\t\t0 0 1 2 3 2 1 0 0;\r\n\t\t\t0 0 0 1 2 1 0 0 0;\r\n\t\t\t0 0 0 0 1 0 0 0 0;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['    o    ';'   oob   ';'  oobbp  ';' obbbppp ';'obboopppo';' oobbbpp ';'  ooooo  ';'   opo   ';'    o    '];\r\n\t\tboard(:,:,2) = ['         ';'    o    ';'   bbb   ';'    bbp  ';'  obbppp ';'  obbbp  ';'   bbb   ';'         ';'         '];\r\n\t\tboard(:,:,3) = ['         ';'         ';'    b    ';'    bb   ';'  o bbp  ';'     b   ';'         ';'         ';'         '];\r\n\t\tboard(:,:,4) = ['         ';'         ';'         ';'    b    ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tboard(:,:,5) = ['         ';'         ';'         ';'         ';'    o    ';'         ';'         ';'         ';'         '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'b'))\r\n\tcase 6\r\n\t\tclear board stencil\r\n\t\tstencil = [\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 6 7 7 6 4 3;\r\n\t\t\t3 4 5 6 6 5 4 3;\r\n\t\t\t2 2 4 4 4 4 2 2;\r\n\t\t\t2 2 3 3 3 3 2 2;\r\n\t\t\t];\r\n\t\tboard(:,:,1) = ['rryyobpg';'ryyyobpg';'ryyoobbg';'rryoobbg';'ryyybbgg';'yyybbggg';'ybbbbggg';'yyyyyggg'];\r\n\t\tboard(:,:,2) = ['ryyooopp';'rrryyppp';'rryooogg';'rrrroobb';'ryyybggg';'rybbbbbg';'bgyyyggg';'byygyygg'];\r\n\t\tboard(:,:,3) = ['  yyoo  ';'  ryyp  ';'rrroobgg';'rrryobbb';'ryyyoppp';'rrrorybg';' gyybo  ';'  oyb   '];\r\n\t\tboard(:,:,4) = ['        ';'  yybp  ';' robop  ';'  gbboo ';' boybo  ';' rbggpp ';'  ybbo  ';'        '];\r\n\t\tboard(:,:,5) = ['        ';'        ';'   boo  ';'  ggbb  ';'  oyyy  ';'   ppp  ';'        ';'        '];\r\n\t\tboard(:,:,6) = ['        ';'        ';'   oo   ';'  g bb  ';'  ooyy  ';'    p   ';'        ';'        '];\r\n\t\tboard(:,:,7) = ['        ';'        ';'        ';'    o   ';'   oy   ';'        ';'        ';'        '];\r\n\t\tassert(isequal(rumis_scorer4(board,stencil),'o'))\r\nend\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":0,"created_by":26769,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":25,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2015-03-21T03:35:46.000Z","updated_at":"2025-11-03T11:20:28.000Z","published_at":"2015-03-21T03:35:45.000Z","restored_at":null,"restored_by":null,"spam":false,"simulink":false,"admin_reviewed":false,"description_opc":"{\"relationships\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/document\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/matlab/document.xml\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/output\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/matlab/output.xml\"}],\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"relationship\":[{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId1\",\"target\":\"/media/image1.JPEG\"},{\"relationshipType\":\"http://schemas.mathworks.com/matlab/code/2013/relationships/image\",\"targetMode\":\"\",\"relationshipId\":\"rId2\",\"target\":\"/media/image1.png\"}],\"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 problem is very similar to\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://www.mathworks.com/matlabcentral/cody/problems/3101-rumis-scorer-3\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eRumis Scorer 3\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e. The main difference with this problem is that the board will not be completely filled in. In other words, the maximum heights designated by the stencil will not necessarily be occupied. Write a function to count the squares visible when viewed from above to determine who won each round (the stencil may or may not be helpful). See the test suite for additional examples (including test cases 1 and 2, which represent the completed boards shown below).\u003c/w:t\u003e\u003c/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\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"},{\"partUri\":\"/media/image1.JPEG\",\"contentType\":\"image/JPEG\",\"content\":\"data:image/JPEG;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAIqAoEDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKhnuobdS0jhQPU1yGu/ELTdLUqsoeTsq8k0Budk8qRjLsAPeq/8AaVpu2+eufrXh2r+PdX1RiID9niPc8tWE2p6jkMLybd67qwliacWdlPA1pq9rep9LJKkgyjAj2p9eE6F4+1LSmVbwmaL+8Oo/CvU9D8XafrEKmOZdx7ZrSE4zV4nNUpzpu0lY6OikVlcZU5FLVkBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABUN3L5Ns8noKmqlq3/ACDJv92gDw7xX4uv7/U7i1imMMEbbSVPLf4VzkMKOS4JLHqWOSaZqIJ1W8/66mo1LR8qa8mvOUpNXPp8DhacaUZpatF0RAClCjHNQpdjb8/GKhmvAvIPFYJNnVKNmW2VApyeagS6ls5RNaytE4/iBxn61nPfMzYQE+9IA8gy7HHpWsbxd7mU6Uais1c9k+H/AI1l1SU2dycyIB83Y16gOQDXzz8Ovk8TKBwNv9a+hV+4PpXqUZOUE2fN4qmqdaUI7IWiiitDnCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKpat/wAgyb/dq7VLVv8AkGTf7tAHzPf86vej/pqaQr8opNQP/E4vR/02NN38Yrxa6/eP1Pr8C/3EfRDbg7YSKypmYuq54HatG4lHl1lSSASA1dJGlZl6NFGKnJwKoxz88mrHmhhSlF3Jg1Y674dnPidf93+tfQy/cH0r53+HJB8Tqf8AZ/rX0Qv3B9K9Kh/DR8zjv94l/XQWiiitjkCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqGe5it0LyOAB60ATVjeINTtrTTJvNkUfL61zHiH4gwWpa3sv3s3TC9vqa801bVL7VHZ72Usp6Rj7o/xrKpWjDfcTkkctqF+h1G7mAJV5CVPqKp/wBoeZ0q7fxrMdrKPqKxpbKSEkxnctcS5Ztt7s9rC46KjGHYsvcFlPeqsj9OaiWbAIYEH3qOVxwc1ooWOydZSV0ywsp3VN9q2Dms/wAznjmp4reSVvn+UGnKK6mUsVGmtWdBoOvtouqQ3qKzgcOF9K9/8N+PtM1qBNsyh8YIJ5FfP+mQwwghgDV8WcYkWa1laCXsyHFOFdR0toeFiK6qVXLufUEcySqGRgQfSn14HonxB1TQ5lg1ANNCOPMX+or1fQvGWnazCrRzKWPbNdUZqSuiE7nS0UiurjKnIpaoAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCjqt+mnWbzOcADNeOa94n1DV5GCyNFbHoFPzMP6V6L8QHKeHZipwdpryQFfssYB52jNcONrypcqj1Im2loVAQowFwKinkOzireR3qvLCWX5cEVwc6ZgnqYsyljVR+BzzWlPHgnOaoSJ1wK2i7msZWKcsccwwyYPrVCXTiZMJLlc/lWk0bMPao9mDiuiMrbGyrzStcghsFTBHze9WhG24ZpYwV5Gc/SrKDdjjmok2ZyqN7li1T5T3NXkHy46Gq0IAQ4/KpmmVUznms7sxbLBTKjdz7mq6u1hP9ospmimHPyng/UVG1yzcDgVHvAjYnnimuZaoIt3PfvAWrzavocMs5HmFBux611tcB8K1/wCKchb1UGu/r1FsdIUUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKRmCjJOBWHq/iiw0qJjJMu4ds0AbbOqDLEAVCt9bM20Srn6155c6rrmvk+QDZWp/jkHzsPZf8aYdFZYgYL64S4XnzS2cn3HT8sV5dfOMJRnyOV35a2NI0pSVz00EEZBzS15xa+KdT0RxHqsPmQD/l4i5XHv6V2em69ZalErwzKc+9ehSrU60eem7ohprRmL8Q/wDkXJ/9w141C48pOe1eyfEIg+G5sH+A14rCcQp7iuHMFfl+ZnMtE54FJypytNVsDnpQG5zmvNSM2hkqpM+1l21UlsBglcEVbPzOT/k005Uk5rVNoztbYxntiGIxgUwQLu6VrviXqOagktnX5gM1sp9w5iiIQDhR2qVUC88YoLBM5P4VExLN/s1aTY7tkxlVELAAntUPmF1DN94jpSXB2wcDmoVbMa+taKKBIsZ4HtUczFIXbttpykBeaiuXb7LKfRapIrqe/fC9Nvhi2/65j+VdzXHfDmPZ4bgH+wK7GvQOgKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAprttQt6CnVFc/wDHtJ/umgDitY1bUdRuZLXT3WKNDtkmbnafQDuapWeh21vIJ5S1zc/89ZuSPoOg/CmaKxafU8nn7Wf/AEBa1x1NfDZxmOIlXnQ5rRXRfqddKmrJhtApCmad1OKCMYFeIpG5E0QcEEAj0NZM+gIshuNOlazn6/J9wn3X/DFbfSm4Jz2rooYmrQlzUnZicVJanBeKdW8Rtp7WE9qHVhjzo2yCP51xkepRK4hmUow45Fe0SojKQygj3FcnrfhG01LcyL5UnYqK92Gcqs1GuvmjCeEbV4s5UqAgYHINV3YqTUN7pOr6I7ZR5YQeD7VWg1KOcFZPkbHc13wipLmi7o4JwlB2ki4rtknNK0mR1qsWAPB/Wonkx3rRRuzJstBwCD1xVi7uvMtiVAUgc4rLEueQac837kiq9nqjNsqryCT1NKSCCemKjz8wOTRuzkDpXVY1FuB+561EoIQYolf5Cp6duaqTXix4VAXfpx2qknsBeV8KSxAA9ap3V2GhdYwWB4LU2G2nmfM7EA87Qalu4xHbKijALD+dUrJlRWp9MeAl2+HYB/siuprm/BS7fD8H+6K6Suw3CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKiuf+PaT/AHTUtRXP/HtJ/umgDznRP9dqf/X4f/QFrXU5asfRf9bqf/X4f/QFrXU881+c5r/vtT1O+l8CHmgU1jtPtSCQE159jSxKMUhHBpnfOeKcG60XsIgdTmonXPFWG56VUubiK2jZ5GCqBkk1pG7dkaRditPAsqlHUMp65FcT4o8OaZDbtcIyQydlHereseNkj3R2S5b++a4S/v7m+mMk7lia+hy7BYhSU2+VHDisVTa5VqzPM80DkK+V96ljvFYYfgmmMF7iomjz0HFfRWR5V09y6H9D1qZjhD61lgyROCOR6Grgu49m5uMDmplEm2o0sR2PSq89ysXJPPpUDTzXMjCJdqetSwWaKct8z+prRJLc3sVZTPcqCRsjz+daVpZRogKrzjqaJIwu0e9XEIwBjAolLSyAkWPCk8ZAqleJuaFfWRf51o9AOKzrht1/aL6yr/OohdyRUNz6b8Irt0GD/dFb1Y3hhduiQD/ZFbNegbBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUVHNMkMZdzgCuJ1/4h2enFoYD5k3TavJobtuB2dxeQWyFpZAoHqa4bxJ8RbKyjkt7c+bMRgKnJrhNR1zVdbctcTtbwn/AJZqfmP1NUY7WOIZRRnux61xVsbGHw6mbqLodJ4Q1NnhuzeEJJPcGUAnpkAY/T9a6rzN1eXy7kYYJB7YrQ0/xFdWbBHJlT0Y818njcJKtUlWjuz0cPUi4pPc9BL5UCmg84rI0/xDZX/yh/Kl/uucVpq27kc5ryJ05QdpKx1WJgxBHpTtxzUOeaXNRYTQXEpihdhyQM15RrGuXN7cyJKzhQxAUHgV6heNi0kP+ya8ZvHzdzFuu417mS0oycpNbHBjm1FWI2Ksfl5qOROOlNfB+YHn2oDOPcV9IlY8lkLIc5NRbW5qzIyqhdhVN5TJwp2g/nWkbgk2OZgq88t6VAwJZQ2cE9BT8bRgc+ppzj5o+M81S0NYxsTxIoGBUyrgjjiokZVGT1qQNk4qWyhk4BdBk9atou1fmqlK4SaN3IGD3ps1/wCZ8kHP+0aOhpTpTqO0UXZ7lIl3M3PpVCCRrjV7MlcL5q4/Ooo4CzbpG3GrdkCdbsUAGPNX+dEGuZJHfPBexpc8tz6k8PLt0eD/AHRWrWdoi7dJg/3RWjXecgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUbTRocM4B+tAElFIrqwypBpaAOT8fag+n6BNIhwwQmvCkncMXb5iTkknJr2D4qybfD8gz1XFeLNLgYrjxV3ZI567tY3obhJFXnFWC27oa56OfbjqBV9LshcZya82rB20MotXLsjE8HFVXjZm4OKmWXcORzTWye/FcyVjqjIryKq9SQw6EHkVdsPE2p6YoBxcRD+FuuKpsnJ5yaYwO4U5U4TVpq50QryjoegaZ4ksNVUBJAk3eNuCK2QeM15EY0B3qSkg6OvBrf03xfLYqsF0rTp039xXlYjLWtaOvkdtOvGZ2moNmxmPT5TXit1IPtUwBP3zXrVxqdpd6VNJDOjDZ0zyK8bupP9KlZehY13ZJBrnTOXMfhiSBhnHenhvlqoj/ADZp5kOa95xPIHzZK8mqa5D7utWZpcrg8VEvCj0Pemro1hsKvXNOGBOoJx6UgweBnio7i4S3kVmPNPfQovIikEtzVefUIojhPmbpgdqpPczXB4OxO+O9JGojPAznvTUe4DLiSaaVfNPBHAFWYQFAAFVpjm5UD0qxHnbSnse9gklBNFkHHerWkAt4ksFP/PQVQ38AVe8PZk8W6cD03cfkaVKPvFY+f7ux9VaSMaZCP9mrtVNNGNPhH+zVuu48cKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACoLi7htkLSOFA9TWD4n8URaHAc8yHhVHUmvKtV8QatrUjebK0EJ/gQ8ke5rOdWMPiZMpKO53fiD4i2lkWgtD503ZU5rzy+8Wa5eSmQXIg5yEXmqK2exSBxzye5oFsFIJOTXFPFOXw6GLqt7HR6F8SL3T5Fi1NCyf8APReleo6R4nsNWhV4ZkOR614S8K8ggkGoI2udOn8/T7honHJXPB+orSniuki41V1PSPjBcBdDIU9So/UV44JARzWp4l8Uahq9ktteIBgjJBznmsAHLd6uq1OzRnX1aNBJAcAnipVlw3Bqgjlc8/rUiSEfSuZxMbGol0cjJyaspcZTmskNwKsI54BNc8qaZSm0aO8EjH401iAcCoCccjP50x5SCAgLN6Vlyam0ag+RhUJG7G0ZNSiCSRQZSQf7oqQKEG0CnoiuZmfPGdjAuR7KetY0ts6AmPkehrcugQpxWezYGB1rrouyM6tRvRmV9oCnaw2ketTiTOOaJoVlPzDOKrmOSMZXkDsa6tGZ2T2JmfPJphmwmegpjzr5eMHd6VFtZjhjx6UW7mkVZExuGYYiHXvUaLyd43NnqacpwuAOlNjYnJzyTxQMfgBacF7k0gB701mxnFILEDPi7yfSp/OG3g1QldjcEL8xqQRuMbzjPYV008LOq9D1aeIVOFiwLjc+F5NdF4UhB8Uac2ctuOfyrnY0UD5Riun8Epv8VWQJ5GTj8q6q2EhRppre5zVMRKro9j6jsRiyiH+zViobUYtYx/sipq5zMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAPGfiTdPFrUQzxg8VycN6rYBro/ioSusQn1yK8/81lbOcV5+JjeZyVviOpEgIzSMwXPNc9FfSKQMnFPnvp5SIrYZcjk+lcygzNO5pz3ccSFmIGPWsaXUZJ3K2qFj03EcCpYtJd/mupTI3p2q9HbrEu1VAFaKUYl2sZD2rmPfOxd8elZrfI2K6K5HGAKw51wxqqcrksjB4470LIVIqMttp4jypbODitXbqCLcUgNXY2ycjpWdbQyHnacHoa0Y4yo56VzzsVyltF71TjeRJpCvY8cVejxjAqrHgvKDgc1knuNRsTpeL0fg1I0gIyDVCaJWwFPNTx2swiypyB1GaTjEq9kMnO7gVQlTrxVmeQRoWYYx1rHuNSzlUHHrXRSi+hm02OkcJ1P4VVmmO09hioSxd8k0yQhkNdSRUYWEDZANPDZHHWoVOAB1p0WT2/Gm0aEi8imRnGT2zTwQoYng1XDMw+Vep60FQpym7JE7S7EJJpitJKfkAC/3jUXkk/eJJpJSwTGcAUK3Q7oYTlV6hFnyLplVw2epqwuT1rPtzuuCTWgrHH0r3sL/DRyVH7zsWA2xeK6r4fASeLLY452n+YrjuSK7T4aKW8Vw5AwEP8AMVON/hr1JhufUFvxbx/7oqSmQ8Qp9KfXmGgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUVTvNStrKMvLKqgepoA8f+LC7dSt2x/Ef5V5ySCea674j+I7XVtUjjtmDCNiSwriWlHrXHWV5nJW+InzgnFLaMy3ZIJGRVZZBnHWiFj9sGDxWTjozJHSQ3akgP19anba43Ic1joQTipVkdD8p/CuZw7AmTzA4OayJ1LEjHNb9lC2qzJDHjzG4ArrtO8DWsDLLdfvX9O1c1bHUsN8e/Y6qOHlU1Wx53pvh2+1SQCGJtpP3mGBXc6T4GtLP57s+c+OmOK7BLaO3QLEioo6AClKV4mJzatW0joj1KOEpw13Zzt/4ctZYcRRqhUcYFcne6PPbE4UkeoFelugGKry2scqkEDmow+PqU9HqjWphYVPJnli7kz1qkkoWSTPrXdat4cyGkgAUnmuE1C1lsZWWYYLcj3r38NiKdZaM8uph5U3qN80l8k9K0be5McTc8GsEMccVes5TLCUOCVNdM4aGUkQavKVhJB4aucLjNbuugi3z+dcyWz0ruw8fcM4lnzMrTHbEffNRBjnk8UjyhlIUZNa21Lim9ixGPl3HpTxPztVc5pI4meINIQq+nemvKqAKgAArNu56NLAu3NU0RIExkyHOe1RlwDgdPSojKzVEZCSaFFs7E4Q0gi4sh5J6YqncS7sgetNaRlFV3kJbpVwjrczrVLqw+3BExq2rYJzVCGQrKSRVgOXPTivaou0Ejy5LUmM4BwOa7/4UjzfFIJHSMfzrztQgPBr074RoD4jY46Kv8zWOLk+VBFI+lI+I1+lOpF+6PpS1xFBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVLvUbayjLyyKoHqabqt19jsJJv7orwfVfENzrt7MJbhkhVyojVsZwe5qKlRU1dkykoq7O9174kwxM0FgDNJ0+XoPqa881LVdT1iUm7uGCHny4zgfnUCxpEuBgAelJ5ueVWuCeJnLbRGEqrexi6jAoUBVCgelZRIzg1v367lORWDMhL+1OlK6MBVOORzSxOBOCcgVXM3kg80y2kae4bDfdGa1a0KS6mwkuGqeB/Mk56VkCciTbzWtbD5BWFSNkCR0vhMFNehwO/X0r1XIJ5ryrwvk6zB82BnketeoKDmvks4d6y9D18Kv3aJHjBHFRMhHUVOpxQwDg9q8lM6k2igyn8KacKpLcClublIQQOtczqeqSAMATXVRpSqOyOqlTlMl1rXUtYzHHgt615frt/LdTh2bPNamqXbOxyc5rmL59zAg19Rl+EjSV+p1zpQjG1i0wHkKynn0qOOYwzhvzqos524z0o81ZMAnkV6ah0Z52JwFOa5qWj7FzXJd9qD6iua3gDitW8ZpINgYHHesyGPqxINd2FoTlHlijxvYSg7T0EEbNksSFqaP5VwiYHqe9SK6gcinbgQcGvWo4GK1m7l+15NKat5jTKSMN0quwLE7QSKlYDHvUtthMg96VXAQm/c0ZrHFSS97UpE7euRUBc5Na9zbxSqQo5PQ1kTQNDIVZuK4pYSpB2khyrqWqI/NJJFA65oAGaeMCtoUEtzCU2xUA35YVIzY4HSoieaUfN0rpTsSOU4Ir1v4QqG11yBjCr/WvJ44yxAAJNeu/BlCdXnJGCNorkxTu4jR9Dj7o+lLQOlFcwwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqOaeOBC0jAAetcH4i+IUFjKbe0Bmm9F7fWk2krsD0CoZ7qG2QtI4AHqa8gHxUu7ZT9ptXBxwVORXB+KPijqGou0cbmGM+h5NSqkWrp3FdHqfjr4gafbafLaxSq0rAgAGvGrd2eHzlOQxJJFcbd6lcXbkkt8x6k8mun0fcmnR4Jz3rDEX5VcwrbG5bT5H7xuPWrglgVDtbdWOGB9al+6gdTn2riaOe7F1C8T+8BXOXl6ATtIqbUZGeU9ayJEOMnNdFKCRvGn1ZFNcO561b0hj5zc84rPYc4FX9JwLgj2ronblKkvdNcxK2GHWtKzdAMMcVTjxjABNW4oS3yqMnNcdR6ama1Ok8KMDrcJyCM8Yr1Zema8z8H6PeJqKXLxMsS92r00YxxXyGbyi62juexhotU1cdjimMQFNLuFRscqeO1eWkbo53UZwrsCa5PUrobjg1s65cLHI3PNcXf3BYnBr6LA0bpM9mjC0blC9nDk81g3jkMMc1o3Djr3rJcmWQ7eQDX0+Dw0qkuWCOTF1401eREJCc1YhKLIGcZX0p/lgx4KD6ik+znZlW/CvpcPl0KXvS1Z4VbHSmrR0RHPEJHYxNwe1VDEyHirABBPYinbs9Rmux00cikyr/AA4I5p6rxU2wN2prRmMZ9e1HLYOYjwScVNFHjljgVF5mznHNQNOXOCalyjEdmzQNxHEf3fJ9TWVeMZJSxpzNioJD83Nc9WpzKw4xsMA4pT2pOOgNSRoWNc7aRQiqXrX0vQbu/b5EIT+8a2tA8MxTKs8xznkLXc2tskEaoiAKB0FeDjc4VP3aW534fBuWszK0Hwna2KGWdRJIATkjpWZ4Y8WxeGvEk7n/AFbSc47V3arut3AGDtNeKa3Zul9I4VkYseMVx5ZUq15Tqzd9h42Cg1GKPrDQfGum61CrRzoSfeumR1kXKkEV8T6br17pM6skkkZHoa9Z8J/GB4tkWoN8vTfXrc1tzgufQNFYWjeKdP1eFXhnQ5HY1uKwYZByKoYtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFHSgArI1jX7PSbdpJpVGB3NU/FXiK30TTZJWkAYDOM147casdYnNzPP5pzlUzwv4VlWrKkrsic1E1vEfjS+1Zmjty0Fv/e6M30rmIAACeSScknqasSDzFJxSRRgDpXnzrOfxHNObkNktxKuGA2nrXK6n4S824M1uCQTytdjtJBpQwGM9qVOs6buhRm4s5rTvAjyyI14yxRAZCjkmm3KRWV21vEMIpxiuztIbq9k228bMD3rn/Fmh3emzLciBnQ/fIoli41aig5a9jolGU43SM9QrKGHSpGXMdVbC6imbaSB7Gr7so+VcVMm07HPy2Zz95Gd55rOkwRg1q3xxKT3rNdSecV0wZ2RWhTZOScYqzpiYusdT7VLDbS3LCOKMyMewr1vwN4EtoLJL+/iDXJPCnoKwxmOp4am5S+4pUXNHOaL4UvtTAdU8uMj7zCu90rwlZaeFZ082UdzXTRwrGu1VCqOgAoK818jic0rV3a9kddLDwh5kMaBOFGBUhBxkUoGDTiwxXnNnTchz602R8I30pzsDWRqmtWWnW7edMN2OFHJrSnTc3aKuOKu9Di/ENx/pL81xeoXqR53MPpVrW9ba7u5PKGAScE1y08bSOS7EmvtsHhuWC5j061dxiowQy51CWYkJwKitJHjBySeasx2oHJFMdQshCivpcrt7RpHh4yE3HnmzRhmVgAetSvGD0NZqbl5FWI7ggjNe+eU49hTGVJyOKYUPbpVvzEdDkflUYhzz19qZOxAOBgDn1prcHnk1bMeBUTJuY8UDuVCN2aiaDPIqyyjt1oAJ7VEoKW5SkZ8kZQ89KqSklsCtto1K/PwKz7ny0b5B171xVqXLrctMqKuFyRVm3H71cnvUIfnaamgOJV471yVPhZcdz1XQlA0+Ej0rbiGOprI0NcadCTnpWo7YwFNfn1fWbPoaS0Ro2wBPXGar3/h/T72JvtEQ8w9JB1qS2RihY5HHFOFwy8E5Bruy2r7OLs9bnn5grzR5z4g8FPaRebAPNQk5wORXD3Fq9vJ8m5SOxr6MhhjniYO2c9BWF4g8LaPdW7PIyxTdmr34YhSVpnnPzPJ9C8UXmkTAxyvHg9jx+Vey+Fvi0pCRXzDHTeDx/8AWrx/V/D0llMURfNQ8gqKwmW4tJCI2YDuK0cGtYMD7T0zXrLU4leGZTn0NaoIIyK+OdA8aX+kSp5c7KAfuk8V7R4V+LNvdCOG9YRueMk8GkpdGFz16iqNjq1rfxh4ZVOfQ1eqhhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRUM91DbIWkcAD1NcB4r+KGmaJGyrMrSY4UHJNAHd3eoW9nGXlkVQPU15t4t+LNhpSvFbyB5ewU1434l+J+qa3I6RO0UR6AHmuQEc11IJJmYhj1o1Yjpdc8b6j4lv1EshEO7hB/WrNtcPAwKk4qHTvC1y1v9tWIpAoyWbqakCHcfQVx12nKxhW3Ogs9QSU7GOCa08bRjj1rj0GDkV0Gglry8jgkfAYgZNefWSgnLoZQg5OyNONJJWCRxs7H0Fb+m+FZJWEt4cDrsFdRp2k2lhGFgQZ7sepq6FA7V87XzJy0hoenSwkY6y1ZUt7KG2i2QxqgHoKiubaOeNklRXQ9QRV9ulV3GR0ry3Uble+p3xXQ8/1/wDDdA3GnMIZhzjHBrhZlvNOmaG/hZCvG7HBr3Upk1najpNpqURjuYVcHvjmvYwubTh7tXVfiZ1MLCex4hdAzzDyVMhPZRmtvSvBd3e7Zbo+VHx8mOTXoOmeF7DSciOEEk53HkitgQADgcV0V83duWl95VLCRiveMDTPDlpYIqwwquByccmuvsU8u2CjoKpKM8Y5rRtR+5rw8RWnU1kzapFKOhOGBGDTWWmkc07O0+1cxhbsRtkDFZt/qlrYIWnmVcds8movFOpyabpLzwcSZxn0ryi71gyy5ldnc85avTwWAeIXM9jsoYfnjzS0R0uteMp5t0NkDGnTd3ri7y7llJLOzMe7HNWBMJBnafrVWZQ54GK+jw2Hp0dIo9BUowj7qMecNknmqrZ6itSWLrmqksQC5Jr0oyOOpTktUMhk42tVe4AWZtpyKc2ORmn2Fmby7MZYKoGcnvXrZW0qr8zz8fUvSSfQbAC/ABNWxaNjnvWjHFBanYqjI704lCc19EjxOcorE0eDT2OckcH2qyQOtRlctTJuVRkfeBzSFfm4qw0ZzSbY41Z3baBQFyAW+45qOSaKDcp5IqG71Hd8sC7RjBPrWduLnJNYyrdEXGHcneZpWJz8tVZsNTnYhcDvTHHyCuWpJtGpEo596ntwfOUY4zSQwtIQFUk11Wj+HiSs9z93rtrzsTiKdGDc2bUacpyskdXo5kFhCuMDbWzbKqvl2DGs2NyqKqjCjoKkSXng818PUTk2z6GKsrHRRyoGXI+XvilMEVwT5OBj1NZ0d4ttGZZRuRRyKytQ19JsJp77WYZJz0rowVP3Gjysc7TRp6jqH9lL8+d4HAHeuVufEb3NyZJUyp4x6VUuNXu4d32pPNBzgnmtfSvDX2uKK9Z1ZZPm8uvTgnT13OB6lrRfs95crITlBxtK8VPrHgSy1YNJbYilPOQOKTU9SttBj2pCBJjgAVz58dXmNpO3J6r2roo1XJ3joJq2hzXiDwxLozhZI9yf3xWGgubY74ydnvXfyah/asIE0yyH+6e1Y9/pBuFPlfLjoMV2JqWkwbRJ4c+IGo6RMqrM20H7jHivbfC/xRs9RVI7lvLkP97vXza+kzKd0gIA6YFMS4urP7jEqKThKOq2DU+2bW/t7uMPFIrA+hqzXyl4X+JWoaXIiPKzoP4XPP517d4Z+JOn6tGiSSBJCOjcUKSeg7nf0VDBcxXCBo3BB9DU1MAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACimvIsa5ZgBXMeIPG+maJA7y3CAqO5oA6WWaOFSzsAB61xvib4iaXoUDF7hNw6DPJrxnxd8ZbvUHeDS8qh48w/0FeYXl3d39wZruV5HbuxzRYVzv/Ffxb1PWHeKxZoYTxuPU157JJcXcxkld5HY8ljkmtfTfDV3qpX7NG23u5GAK7XS9C0bRnMl8wnnUfdx8oNRKpGIHK6L4M1PUmSRYdkLH77cCu+sdD0TRBtmAubgDv0H4VDceLGCqkSeXADwMdqx7nUDeXAW1RmkfsBzmuedWT30QX7HT6hrkBsZbcKEUrgAdq5KFC545BrqNH8B3l4Bcai5jQ8he5qTVPC1xpZ8y2HmRD26V5UsdQdRwjLUJYepJc1jBSyx1FaWkxiHUIj935hzUUUwkyrja46girVm6peREjI3DgVnWnKUWmTSXLJHq1u+Y1weMVZBzVSLhEPTI6VaXkV8ZLc9ZoGTIqJ04qcNgUjc1NwTsVGHNR4xVl4zmoSuK0TNFIhZcmmlNo+Xqan20beKrmNFIrHA7YNWrQ5jGajZM9aVFMRJXkelDd0TNqSsXDikPIqNJA3HepM8VnaxjZo5TxwSNFYf7Qry+402V4/OUbl9RXp/jo/8AEkJB/iFecQX0kOUB+UjpX02VOSoXj3PXwlnTszPinaIeWxwKHdmJ5yKL1ldyeAfaqkUhjPrXtKN1c6ZaOw6ZtoyetUXVpO3FaItmmHmnkGopYWAI6VpGSRy1ItlDykReetMjJSckHtUzoQeRUQH7zp24r18r1rI8rHRtSLEc+W+bmrwCSAbDzWQAevpVyGQqMg819Kjw5Fwhl4NMMqhvmpouDKwVz171k3dy29l6AUpSUVdijG7NG61COMYT5mrHmuXnbLN+FQPITTd3PFcs6rloaqKWw/60cbfekHzA5pM7jisxiAGr1lpkt84EY+XuT2qgZAvHU10WgalBGnkynaSa4cdVqU6LdNXZtQjGc7SNnTdHt7QD5dzeprbSPAxniorYoyAowNTA9ea+NrVZ1JXk7s92nTjFaEgGCKABuGKiaQAcnAFZt1rCRhlRgMdW9KmnRlN2iip1owV2aWr3ix6VJGG+cjAArzh7qZJSQ7AitG51O5uHYwnjP3jWPLBKSzNknqTXr4XDqjG1zwsTWVWd0XTrVw0RRyGFXLXxHqMEAiguGQduelYJGPrTVcg9cV0unFnPc6NdVuLo7buQyA9SeuKuNpcNzCZYDn1U9a5dLhlI5rRt9TliYFH75rOVN9NB3Hy201pKGQFSK1dN18xzYukBXpnFJBqtvdKY7wDJ6MBTbzTYjEZbdxIntT9o1pLYDaluLK9twsAR89h1rnr7R9kbyoVHtWXvuLOUmMlanGruyFZBlj0PpW8ZtfCF7GNc2zRH5wQfUU631C8syrqzYXoc9K3bdIbqJvOOeeBjmi+0Tz7TdFIox0SrbjLcLo6fwt8VrzTnSOeQyRj1PIr2zw74/wBN1qJcTKHPUE18iyWc0MpRkIYHrVix1W906YSRSOjKeoNFmvMep9xRzRyqGRgR7U+vm7wj8XLm1KRXrb1H8Xeva9B8Z6drMKtHMuT2zQmmM6aimo6uMqQRTqYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUEgDJrK1PX7LTImeaZRgdzQBqMwUZJwKwtZ8Vafo8DPNOg2jua8n8YfGeOIvb6b+9k6ZB4H414zq/iDVfEEzPeXDFSeEzgChK4HqXjD40vKZLfSvm7b+w/xryO/wBU1HWLhp725eQn1PA+gp1rpzzEJGpdz+lbcPhaRIw8rgj+6Kp2juJ+Zz1tZySSqVUtzXWaZpVpcOHnVd69s9auwabH9nxGFj2daz76SKJibcMWHcd6xlUvoK50b6z9mtPsSOkUaj+DjNYt5qMUhAhJJ75Oaw5J5Zh+8PNanhBIZfE9pFOoaMvyprlqyVODnbbUIpydje0TwlqevOjMrRQ/32HUV6doXhDTtFRSkQkmHWRhzXQQRxLEFjUKqjAA7U/GBXxOLzStiHbaPY76dJR9SN1GMYqu6K4IIBHvVpuRUJGK89SdzoizmtX8LW16GkhAil9QOtchJZ3elXka3EROGG1scV6menFVbm0hu12zRhvrXoYfHzguWeqInQjJ3W5NZyie2jfPUCryHjFc8kV1ph/dZkgB+73FX7PUY7nkEqw6g9a4qlN/FHVF2NM5zxRTEcN3p4HNc7JsAIzyKayDOacRSE0ICFhSMMCphhz0pGTHvVXGpEIXIpQOelOHBxQaYxpUHp1phdkOCMj1pd2Dwaq3d9BZRNLcSBFHrVxi27LUpK+hzfjidf7Gxkfery+STYc57V0HjbxLDqMZgtVyFb73rXDSXrbRuzX2GWYWcKC5kd1Ooqasy5NNvbINRJIcmqaThieaeJOOK9XktoV7bm1NiwulUEM3FWGMRzhgc1gIWCkjNSCRl6MazdLW6NI1tLNGm8CuDjkmqM8DRPz6VNaXeJAGqxctHPJ98KQvQ969HKbxxNn2OTMlB4VyW5lqODmpVxswBStFtJ70sYxX1Z8qyNJMSgnpWZcnMz4HGa0LlGibdjg1nMCWNYV+xpDuVzT1XqTQymgAbcscLXLYsUEDjIAqIy4zt/Oo5sYyCcVGOnWplIdiXcKdGSDuBqEnPFTQjnrULUDYsNZuLNhhsiulttfiuI8kfPjoK4xIy5xirMaJDhnk2+w61y4jKaNb3rWZ0QxlSCtubMury3MkiSqVUfdCmqfkmXczn8KaJvMAZRTllYdq8lw5PdiZTqSm7yYip5QwOKeqCReaT5pDkjgUhyOnFSZla4tHLnC8H0rPngKcd62vOZRjFQS2vmjJ4zWkZ23AxcsBjGakD4xnrVmWzaFemapnOTkVsmmBZWY4zVuHU5oVIViM+9ZnbNNeQqKXImB01pfWVxGI7pcOf4vWq+o6YsYEkL7g3ZTWAsnHvWlYXs0Thd2c9jUuHLqhjraSaBsbTW/p5+1AK2E+vepbaK2uQRMQslMEZ3OYQSq8ZFZSqvYRdudPtVQpIoZj0Ydqw77wxJIc2p3r2FXP7SaPKkZ9c1ZXXU8kRrGUPrnrWtKbQHCXVnNYz7HBVx1HpWjpPiG80qZXSR1GeoNdVcwWt5CDcJl2/irEvdDC4ZMOpHAHUVsuWaGeoeEviy4CR3bbx0JHUfhXr2j+J7DVoVaKZST718atbzWspKbkPatvRvF9/pdwpeV1wfvL/WpalHzQ7n2UrBhkHIpa8W8K/FdZFRLtgV6bx/WvVdN16y1OJXhmU59DVKSlsM1KKAQRkUUwCiiigAooooAKKKKACiiq11f29nGXlkVQPU0AWao32rWthEXmlUY9TXnPi74t6do6vFDIJJuypya8K8R/ELWfEMzKZWhhJ+4p5P1NAHsnjD4x2dgJILJ/NlHGFPSvFNa8Yax4kmbzJnWMn7inisGGHzZfnyx71qW9jJC3nAYjqnFLcXqUreFjPho2c+1a8WhkKJLj5Q3Ra0LeeyWPcRsl9aj/ALajWUmX5ip4I6VLlpoK50Xh+GCzLqY41+X5Sw5NLdXtrE7HIZvQVyr6s88uUYqp6DNPjdn5zn6muSbYia9u5rmQ7cInoKrqxH3sGpiTjkVG0Z4xzWd77gV7hQRlRmrHhWRovFFkwX5vMAFN3BSSVqxo751+zdBjEo5pVXelJeTKp6SR9DLuABHWp0mz8rVArB0B6cdKTHU1+dtHr2uXMZ+lMKgHFRRyFT14qZGV+/NS1YmzQxkpgFWimKiK80kx3IyuRVK60yOc70zG46EVo7eKdjjmqjNxd0FzEF7Lp5K3Y/dgcOK0rHUYL2ASwSB0PcVJLAkqFXUMD1BrAudDktZRPpjmNl58rPymtl7OotdH+A1ZnTBs0h61gWWu7GEWoJ5Eucc9DW0kqyDKsDn0NYzpSg9SWrEh4pQ3rSUDOagQu1SSaguJFhQs7AD1NSMxXNecePNXulv0tVciHbkgd66sJh3iKnIma0qbnKxo6x4zt7Rnitf3sg7joDXB6pqt7qkhM8rEdl7VEhRxnIzSsor6jD4WlQ+Fa9z0aeHSMWaE4OTVFlGCGGa2rlcjgVnyR9RivVhLQc6KtoZLptPy00TFDg1pPaKRknFQS2K4zuzW6nF7nBLD1Iu8R8TZizmn9qaCiRhO9KcgVB0rYUfKwNFy+ZFwf4abmo5iPNUZ7V35d/vCObGv/Z2hBcOnGauRXKvjcMGs8jml5zkGvpj55pM2JNksWD6ZrDbAdgfWtCJikRLA9KybiQliB61lWdkmEFuhHmVORy1V2cueT1pufWmlq4ZSuaWHSNwAKaOvNBK4HNKcdBWd7sBSMCrVrHkZJwPeqRPNSCU+XgGrhNJ3YmaD3axqVjxn+9VJpizZJJNQlqbuPWlOrKQJJHQWmDbg55qyvIIxVSwANmCevWpRcKjnOfrXgz1kxslQkEiiQYIINMN0iHOcg+lDS+YvyHjFLUQhYqvPNCOT7Conf5en41F5hUdc07AXdwZSGwTVS4tUZSV6+1RvIdoINRfaCrdTiqjFrYCB8x9RxVd3ycYqzNJuODVdRluO9brYB8UecE9avJHjnuKiVQADjNWIXJbBGBWcmBNDcPG33vwNaNnqUlvzww9Kz5I0wNvWkQFR1/CsnZgazOl87PtWM+nqapzWM8TEkZUcg1XLyBgQSMVaTUZioWU7lpJNfCBJb6h5ShZVDKOBntWlaXUEgL+Yu/sprLWzguVysmJGycE8CmPZyW20sMDPBq+dLRhY1ruG2uZP30RXj7wHGa5+80oISqAuB0IHWtuC7JjWNxlfWtaH7NtR1IJ9DW0KzC9jzpYbq1l3Rllxziui0fx1qWkTIVYrjrzwa6K40W11FBsGyQ988Vyep+F7qCCecMsixtj5TVuMJarcaZ7b4S+L9nfbLe8cRy9PmPX6V6nY6ra38YeGVWz6Gvh9YpogXGQQeldf4Y+IWp6JIiGZ3Qfwuf60ndbjufX9FeY+FfipY6oqRXDhJD2Y16La30F3GHikVgfQ007jLNFFFABRRRQBzvivxHF4f06Sdz0HAHU183eMPiLrmqzyRRl7aAn1+Yj+le5/EawkuLeKbyjLFG6s6DuAea8+1jwVp/iC0N5pLryPmTuD6YpOVnqJnicam5LPLKzSE9zkmte10e3uSD54G0fMKNY8N3ekzsrIykH0rKSeSNtpcqe5q1ZrQDe+yw2E42jd3FXHkDIGZQ2PmZFrJsb0RofNG8f3z2q6kuSXgO4NwTis2mtGLUy7q8M0jEqEGeBiq+9DnFdBNosUkXmyyBcjj1rCubCS3Y7TuU+lLQRXWXacDpViG8kRwAeKqFCO1PUZ+tDimI6e1mimTg5OOeO9WNuDgCues7kwMfeta1u/ObGQPrXJOFtUBM8SsCCKbCq2l3DPkhUcEnFXVQex45pskQcEEcVndPR7DTsz2DSNdstShjNvOGbHIzzWyrjNeAwmexmWe1kZWXsDXc+HvHqTOlrqCmNx0c96+ZxmUSgnOlqvxPVpYiM9Hoz0jPcDmlU4PvVa1u47iIPGwZSOCKsqRXiNNaM3sWFl4wakADDIqqelPSRhxWfKQ49iYDigjsaRJAfY09getSRsMIphXnFS9RSbaEx3M6+0+3vY2SWMHPfHIrD8m/0R90TNPbA/dPUCurIqJlV8jGa6KddxXK9UUn0Kunail/CJUUrnsa0FOapi2WP/AFYC+wp6yshwwqJJN3iFr7E0nSvLPHKltYX/AHOK9Q3hhXmfjwomrxnIzt6V6OU6Yj5HRhV75xxRlOVOKlFxnAcYNOcruBzwarS4HNfUr3tz1+VLYnli3LuJ4rPlBLYUVZiul+4/INWJrZGjzG4INUnyOzG/eXumO4Cjnk1Vdi3tWjPbFeetU3Rh2xXRFpnJOL2Krrg5HNNDsMe1Tsh7UzyznJrVM5pRfQcp8whQOTVe6DR3Cqw5qdJlhbcvLCoJmkuJvOY/NXoYCjU9qppaHHja0FS5b6i55FO78Cog/OD1pxcjmvo+ZWPD6l9zi36dqwbg/OcV0JjLWQkHQiuduP8AWGsMRsgpvVkBPFJjOKVmycGmZLNXntmghp4XIznijbigNnikkMOOKU4FNbringAjFV5CExuHSkVSzbRUoVRgFhU50+bZ5ijg1hVqRho9wLUYaCFAr5yPmFI8ySHBBzVOKR4W2sDz61o7IpYgNyhq82WjuxEcTKjDcMrUjSoFJQ/WqZ3I3PIzS70OQDg0coFjzd4wahlOCMVHnHU1GxJ75qlECXPy+1ROxI9KaX+TGOaYx29TVpAOz0yc09Rkg1EpyKsImRQwLCr8g5qVQVAIqFSQOlODEj09qydwJWfJwD161IEwpzmoEbDDIqZ5R6cVLTAjeR8YHSnqGOOKaXV+mAKljB470nsBOmY8EHBqd5prgKrklV6CqzKcZzViEMpBJ4rNgXI4ikQLDtxSRTBZtuTmoJJ2K7R3otbK4mkDfw+tTFMRuRX7eX5ajn/ZrQs2jWGRpFDeoPeqVraS22JEj38ctTmu4LKOSS4kCtnha6FtZgjO1PR7S73Sxr5LnkKOlchd6e0M7I5Bx021s674ie9OLdBHCO46mubN3K5IUkluK6oJpe8WvMSO5ms5Q0bng+temeCPiFqFpcRRSs7Q5AO49K4fSfD9xqEygoTk+ld9a+G7eztPIGHvJBhEXrn1rKporrcEfRmk3ov7GOYH7wzV6sPwrayWmjRRydQorcqxhRRRQBDcW0dzGUkUEGuA17wRNbztf6NK1vcdSF+631HevRaQgEYI4oA8PvLi01I/2f4gtfsl4flWbHyP+NcR4t+H0tmhuLdQ8Z5DJzX0Rr3hWx1q3ZJYVJI9K83vLDWvCBdBCdQ0zGDE/LIPY96izj8Imj58nguLTMbggZq7pl+9sMKAfXNesXnh3SPFVq0+lsouB9+E8Mp9MV5rrPhq80i4Y7CuD6VpGaejEvMtx3cNwpaYvuPT2oW5jgt3jMauT/Ea5xJmVtkpI5rasJ7Pcyzhim3GR60pw0ug5exXnsTNH5kQwT2qiISpKtkGuiRI4498XA9/SqksSXcg3ARnHWs7PYTMoWxZSVPShDNEcg81JcwT2pOOUJ4PrUKSrjJOCKWthG7p2p5j2S/e9a043WXkVySuCcg1etL5oDgjNc86XVDN8xkcZ61XntN53ZO4VJBcecgPerA+6enPWsLtMZLp3iPVtJQJHIXQdjXoPh3xraauqwyEQ3GOVY9a83IUjkZFULq1Kus0DFHXkEcGuLE4CjiVqrPudNPFSjvqj6CjkD9DxUiscmvJ/D/xDayjS11RCQPlEo/rXpGn6nb39uJoJVdGGQQa+YxWBrYZ2mtO56EZxmrxNIHHNPExHB5FQo2RzSFvmwK4rXG43L4wVyKQ1VSUrxU6TBhg8GocTJxaFx2pCmKkxxkU05pAiIjnNNkG5ORmnk4FQu+RVopEDhoxleR6V5h8Qpt+ooeQAnNdxrXiO00iBjI4aTsgryPxPrs2t3YcqqoOABX0+Q5ZiK1VVFHTuX7eNLWRnC9yNu7OKd9q3pg9ay5IWUZTmokuChw/FfTTwrg7NHRDG3tqaYkyTUyXbpwTWdDNubr1qWQjtWTgr2Z0Rqu3MjTjuxJw3NTmzEy7lxisKNyr1rQXoS3ZvSs5U3f3TopVYyT5yKeJITgkE+gqlJluMdal+1xXB3EbWpG+bp0r6XCZbCmlKo7s+dxWYyqNxgrIqtDj60oTC1My5GaQjj2r1Uktjy5NvcqOgNMKsvuKslcmk28UOF9hKRYtr7ZavC4BBHHsawblsuavyKM8VSmhYHcOa5cQpNWKikncrYLUuaDkdeKN3zYriLHMoxkGmrwMmlZhtqPdnilewC8FvrUywS+VvA4qFRk59K0ILoqioQCorGvOUY3QGfyOe9atjqkyskb/ADJ6GkkiikTIUZ9qz2DI3Ga4naotRHSTwWtynygBsZHNY1wr256fiKqLNIjAhjWjBcLcJ5bAZqFFw31QEKXYKAOMmmyIsg3KaLizCElCaq73jGOcVcYrdASH0NBBQZB603zhtwRSFiRx0qrAKWBPJ5qNhuPWnMhwD60ADIBp7APjBAxVhAw470yMYqbO0+9QxEo4UA9aY+VY4NISc5zTWI6k81CQxRvJzninszE460kIaQ4UZFXfsmAGIqW0twIIwRjjmr8YYKCOOKiCU8Fgpwc8VnLUBZGORgZqSMysR8pNPtrWW5ZVRep54roYbVLNAsigkjr6UKIGbBpMrFWbgHnrV9biKOPyV4cHGe1WBeQ28e+UqYx2PWuQ1TVzc3bi3ISLONw71vCDvaKBI6LU9ehsbRY4ZGklxkqp4H1ri7vVWu9zzMcmqrXBjkO1i5NXtL0G61a4B2HBPpW6SiUtDNgjmu3EUSk5PSu60HwYoi+0Xp2KBnmt3T9C03Q0jZ1827P3YVGWJrstD8Gahrsiz6n+6ts5W3Xpj39ahyvsFjF0vT5b10tdDg2x9GuSvH4etel+GvA9tpgE8+ZbhuWd+STXRaZo1rpkCxwxKuB2FaNCQxqIqKFUYAp1FFMAooooAKKKKACoLm0huoykqAg+tT0UAeYeJvh4wma/0iVra6HO6PjP1HeuRnv0u3TSfEdmLe4ztW5/hf8AGvfCARgjIrnvEHhOw1u2dJYVJI9KTVwPnrxP4Ae3U3NqBLCeQyVwMkdxYOUdTt9692vdM1rwgxjCPfaZnmNuWQe3rWRqXh3SPFFs1xpjqsoGXj7g0lJx3Fqjye21Da4OS3+yelabanBM6IIhGwGDz1NQax4budLnPyMCDwcVghnin3SA5Bq3GMtRbnYJbNdEKw+XHBrN1DSUjkIjdd2Pug0+311mgEDAIuMHaKbLskPmwOWQHBzWLi0Kxkqro5BBGKtwsO/WtVLeC7TEURzjk1mT2bwOcdM9amVmItW1/wCU+09PWteO7RxyeMVyfzB+taVtONuD1FZVKS3Hc3wwJyOlISrAkiq1vOuAu7B7VZZQQMGudqzArzWyTKcqKk03V9R0CXNrKfKzkoehqVVHQ/jTZY1dCBz74pSSmuWauiozcXdHp/h/xfaaxbrlhHN0ZGPeuljcHkHOa+fWt5oGEsDMrDkEV0+gfEC7sZkg1MGSDpvHUV4WLyZ6zw+q7Ho0sVGWk9z1/PQ04E5zWbY6ra6jAstvIrqfQ9K0Ubivn5QcXZnS0WI5ccGpS4I4qpkZoLkVny3ZDiF1cQ2yF5pFRfc153r/AI4fzWt7EbVHHmZ61S8Z68f7eksp3IjVRtIPSubntWKLKpDKeQwNfouTcM0IwjXrPmbV7dEcFXFOLcUJcTSXTM8zlmPOSawrttjcdq11PGG+lULu3zyK+wpUFT0ijkdTm3KImB68VHJEs3sfWhk2tikGByTiqq0Y1FaSLjNx2GQwvFKM/d9atyMAd2RioPMzwelKVVun5V4uJwM4Pmjqj06GKi1ybMcXz901KkzLbuo7inW1ssykAgOOxouYDboc8cVwRs5WO+0lDm6FO3Y7eRU6OyNnqPSq8DjaKmzkV9dT+FHzMtywHR/Y0jdKgzinB2HB5FWS0OzSN0o4J4pHzjFNEkTYzTdvNOK0lDsNEE9qHGV4NUZYHTtmtjqtRNIi/erlrUItXWhakzFOc0oGKmuQDLlOBUQ+ledaz1LFHHSpkYgcVXzzWzaWsMtqN457kVzYmVoq4MprclVI7VYhhjuEJLAH61BdWLxZZR8tVA7KK5uW+sRGu2kbk3RsDis6SCaEk7SMd6kt9QuIlwr8elXG1ETRiN+v0qbzjvqIz4rplPzEmpZikqBhgGoJ4RvLL3qJWK9a0UVuhgyEGl5VMZ600tnvRuLECrAeGPAqQLk8ikQAkDFTY46VDYEiBQKGI29aIxkc0u09x0qLgRBmqZIDKPSjOQOKn+ZUDLipbAs2wjgxnHvU0t5GxCjgDvWYZWk5weKlgtmkYFsgHuajku7sCWSbcx8sGrFtBIwHmcZq3aWdvG5yd3oQKlluIYZw7uERR90U0lsBo2Yntoc7VI7VHf65b2cGGKySHsK57UPEc29lt9wiPc9TWNdXIlXnlj2FbRpdWMsXmoTXcrM7YTqFB6VTjWa5cRxgnPpVzTdGudRkAjQ47mvQdM8N2eipHNcjdKfuxgZLH2FaOSirDRg6B4MlmH2i4AVB1LV3Wl2c1wwstDtwccPckfKPp61u6L4T1HX2VrtWtrLqIF7j/aP9K9S0nQrPSrdY4YlXA7Cs9ZbjOZ8MeArfTsXN1ma5blpH5JruI4kiQKigAU+iqAKKKKACiiigAooooAKKKKACiiigAooooAr3VnDdxlJUDA+orzfxJ8PniuG1DRpGt7kc/J0b2I716hSEBhgjIoA8Gnvre+/4lviK1Fpd/dWbHyufrXHeJvAkkAae3XfCeQy19D+IfCNhrls6SwqSR1xXmF/pms+EWKNE+oaWM/uzyyj2Peos18IrHhM9tPZlkIIFJDcPEQ+eP7tev3mgaX4osWudNkRbgD5oT1B9MV5pq/h+50+ZlkiZSKtSUtGIuW11Bc2w2HZJ02iprqJY7cO8iuPQdvrXOi6MKCJU2nuatQXbMuyVsg1Mqb6A0Oa0eVTKg+XvVYFkbGCK6a2hjjtUdZA3qoqa40xNQUMkHlDH51m9BGHFKGI2nmtK3vAo2uMe9ZV7Y3OnzYAOPWoVvH2/MPmrJ0+ZaAdL5qyqCDjH608DJyDxWBBqBHynvWvbThxWM4OIFvCsmOKz7i1Vj0Bq+ucdacYC67lIzUJ8rAoaZqupaHOZLN8j+4eleleFPHcGrYtr7bBddh2avOVTEjIxG4VWurUBvMjYq45yK5sTgqOKT5lZ9zeniJQ9D6EEo4x0NIzV5B4d8c3mlvHbahmW26b+6ivT7PUbfUIFmt5VdG9DXzGKwFTDStPbuenSqRqLQ8l+ItvJ/wAJPJKqnaVHOK5yz1Se0bbncndT0ruPG+qiPXntJo1MRUEEiuIu4E8zdFjB5FfrGVK+Dpyj2R4td/vJRkjUS5t7kblO0nsaimQkZ7etYu5kPGQa07bUlKCG4A2dj6V6UZdzGUWtipOq7vl596gMZNas1osi74mDL7VVEZU/MKtoqMtChjB5peQeKtSw9xUGw55qHE0TTER/mDZII71JcXE0ke1/nHY1EAM8VJuB+U9a4q2BhUfNHRnRDEzguVvQq2q7kxnGKs7QO9RSWjRjfEee4oinGdsgw1ddN8qUZbnI9XdEuKHyMU4YxxQxyRW1hXI9xH1qZGDgZ60xl9KYPlNILpodIpHQVHnAyegq7YzxJcBbkboT94VmahMgmcQ5CZ4qJ1FFXYJdBJbpVGFNUpZS561GWz1ppNcE6sps0SsOfLUgUgc0mTmpVjaRc9AO5rmcktWMixk4FdNaW8C2EeJC0x6gdq5sLhuelXYb6SBNqtwK4sQ3PRBc15M42MuRVOW1gcEABSafBqPmDbJ19aWUo+NtcivFiMqW2MZwDkVDkitGVGQ46iq7hTXQpX3ArCRu5oZsil8s84pmO1WgHBQRmnrHmmIMEAmrAA29alsBo6+9SoSaRQB1qRCQO2KhsRKqEnsKtbFVRuYYqoHycetSyRMEDZyPSs5eYxZxEFOw5NRJG7YwSans4GvZfLQc11ljplvaQ5lh3v3J7VSi7CMGy0uR1Mkg2qO3rWhJJbtAIVhO9eMirzqiSEuSkZOcmsDUL6KJ3W0feDwXpqN3oCVyxeXS6dCOFJA4A6/jXM3F4bl3aQkZ6YqvPM7uSXLH3qzp+k3OozKsMZI7mtklEqxXXzJyIowW7V1eg+C5rsiW4G1OvNdDpPhqw0WJLi9bdKfuxjkk+wrt9G8M6n4hZfOQ2ljniJeCw9zSc+iGY2m6cqslnosAmm6PMR8if416N4c8CRwSC81Ame5PVm7ew9K6XRfDllo9uscMSjA7CtrGKSXVjI4YI4ECooAHpUlFFMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACq91ZQ3kRSVAwPqKsUUAeU+J/hy8dw2o6NI1tdDnKdG+o71zElzBqX/ABK/EFqLa9xhZj92Q/WvfCoYYIyK5rxF4PsNbt2WSJdx6HHINS43Bq584+KPA0+nnzIl3xHncvNcYsbW0m2ZCUB59q92vdP1bwszQ3UT3+mE9xl0H9a57V/C9hrlk17o7K5IyY8/Mv1FOM3HRk6o85tLxY2yjfLnp6V1lt4ggHlxsqsccdq43UNKuNPmIKMhHrVSFpTJuVsOPWqlFT2G7HdT3kN7O29N3OBWLf6K6bpIhlevHSqsV55JUu3J7V0Fu8dyqeXKWB/5ZdqylCzJscg4KHJ4Iq7aXLcfNWpqumYJeRVRieAKw3gkgY8HHqKhpNCOjguVMeSKtLKAmRXPWl0VTaxGKsG/wQgOfxrllS1AlnlzOWB5pwlds5xVcbGydwz9amjUg8YP407aDGSRFhgjOadZanqOjzLLZyuFX+DPBH0qxn5RxUbxBsn2odpK0ldFRk4u6KGv+Ip9b1D7TPGEbaBxVOK6bjJyKsXenh0Jxg1nJaSxyhdwwfWvYwWKhTgqa0SFJ8zuzQLLIM1CwzSMrRHDAg1JHIuMtXtxkpoz2JLS8ltZMqePQ1srLa3seQRHIOqnvWC6gDcOlICR9081SbQnFPVGxJFjgCqrwEZ3CptO1JI18q5TcD0buK0JraJ13wuHU88VoncnmcXqYDJg8DAoVOa0ntwDjFQtBtoK5hkZ2470s1pDcDIwrU4J7UfdocVJWZnfUynEtrLtflfWpvMVtu081ceMSD5lyKpyWLI2+PkDtWdpQ21RaaZKOaa4HpUKTkHa4walWQGtFJPYdrDSuFyay7hh5hrWuCFUYPWsuXBc5rmxW1iolXPNKSD2pXAzxTVbBGea89uxZOsLD5tu7vUUkrng5A9K2LOdCgBVadPYRzjIwD6ivMdfW0gvqYZbik3VPPaGGTGcioSCprS90BKrkLmpI7hlfg9KgV/lpN+M4HNK1xGg92rpgdars2eSKrK+DTmcnvSUbBYkz2FR+Ww5xSBiKlSYkYNPYBqKMg96k3YNOVVI5OKR0G7AOam4DgwI5qRQwIHY0RRAfe5NWooGlcKoNS2IfFAHxtHNa1jpouNwmcKAPu9zUulQRWzgTAFj03dBWpPpzNMJLd9w6k9KhxtuBjmEWkuI12MD2qyda8l186QEDgLiotSu4LZDDF+8mPVmrmLmZVw+7Mn8q6FTv8RSR0mrat9rXYGCxY+7jFctJKGYxwg5PXHepLaG61OYIils8V3mi+D7bTYxd6kyrxkKep+lOUkth+hzvh/whcahOrzqUj6816FptjHbn7BpFsJ7ngGQD5U+p/pWzo/h7UdfwiRNaWH0w7j+lepaF4XsdFt1SKJQQOuKz1YzlvDXw/WKVb3Uj51wecsOB7Adq9CgtoreMJGoAHpUoAAwKKoAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCtd2MF5EUlQMD6ivNPEPgCeyuX1LQ5Db3HUhR8r+xFeqUjKGGCMihq4Hz5Otlq7f2brVsLPUDwJGGEc+xrhfEfgq80qRmCFos5V19K+lvEfgyw1y3ZZIl3Hoccg15tfWmreGA1rfwvqGk9ORmSMe3rU6x2E0eEKnkufPDEevpWnZawlmp8kZPqetd/q3hGx1zTzqGiMrL1aM/eX2xXmt/pFzYyMChUjqKuM1LQV+5sjUBdDcTwezHmpkddi+auUPY+lcxC6sArsUYd/WrkEzyFEmclAemeopOnoDiWL+0HmFrQl074HSs3e6NhuK7NJLDyFVGVNx79qq6hpFrOfkkUHsR3rLbQk5xZRjO7Bp8d95EmdxIqK5tHtnKnketVimTzRypjOhttTSb5ScVdSQOMg5xXKxrt5DVZiu5IujVjKj2A6NkDg1TmtVA5XnHWm2l+sigM3PvV4sjL6isvegwMOdZANpO5c9+1Up5REwUHI/lXQyQI5O0VRlsEOSVBrvoYyUNBFKCYE4JyKnZFPzIfwqjNayWzlo+npSRXRzjO017NDFxqKwnHsXeo461Lb3Utu4ZGPHaq6uCM04EZrsuugW7m7BdwXgIchJf0NStDt4Nc/jB3Dg1ftdQZCqS/MlWpdzJw7Ft1A6dfSoPKyfm/KtOOOO4jLwEEfrUbRYPStEyL2M5lbp2oCcVbfb0NQkDtQFynPaRyj0PY1nvHLbv6rWu3WmeUJPcVnKmnqtGWpNGYHEo64NUJ8Bjg1s3GluInnX5VUck1gM2XPNceIk1ZM1i09hByeTQQMil3YFNPLCuNlj/ADDG2AeKvQXbAYDde1ZrrhutAYhq4JRTFY2nkjlUbvvVTuLX5dyHNQJKR1PFWEnyNvaos47CKJRlGSOKZxjjrWl8pU5qsyKCSBVqVx3KwHrSgnOalKY7UgjxVXAjz3xmpoYXk5CnFPihDPk9PSteJooowMCs5ztsBRW0lYZCmmeVIh5U1uW8vmgogyfpWrBo4+yGeZSW7ACs4yb3Ec7Y2ZuHBfIWt6X7LawxpEvz989agjdbdyEUe+e1SXU1vDaligaVuhzmtEuZ+6NK4k8qRW5Z2BPUVl3GtXbDbCxSMDnnrWZcTbJC/mE8/dpsUdzqMojhQ8noBWsYqO47WI57mWdxyS3rW5onhO71SVXlVkiPVjXSaF4Mgs4Bd6oVUAZG6u30jRNR111jtI2tLAcbsYd/8BUOetkOzZjaXpdrpoFnptsLq9J5PZfcmvQvDvgJ5ZkvtWfzpuoUj5V+grqPD/hKx0WBQkQ39ST1JrogAowBgUrdWMhtrSG1jCRIAB6Cp6KKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFVbywgvYikqBgfUVaooA8r13wJc6bdNqOhyGGXqyD7r/AFFcrew6d4gf7FqNt9g1LGPmGFc+xr31lDDDDIrlvEfgyx1uBt0QEnUMOCDSceomrnzP4i8G3WlyMWjO0HhgOK5NvOt5Duz9a971C01Tw85ttVgOoaX037cyRj+tcnrXgy21GyOo6RIJYm52jqPwoVRp2kLY83ju3aRV6gV0kNnPIylWycAkZ7Vz9xp89hMQyEMp5BFS22qPBIHUnf6VTjfVBZM3bi1jdlVuGxzmsy+0khDJAdy5xVi3vhfXGbv5MD5cVfWRI0UlgUUn5azs1o9xNWOOYNGxU5GKUOQK2bu1S6LMgO4+grHntpYXwykCq3AdFI4Yc1tWd4oXYTz71gh8DmnCRsjBqJ0+YR1UcmcmncMcYrCtb4r8rGtaKZJFDKc1zSg0AlxCrDpzWXe2K7C6rgitjdu5qNwHXBFOnNwegHNxzvC21gcetW0kDDINXrmzjdeV5x2rImhktTlc4r18Pjb6SGX1bJp8nBBqjBch/lJwaugllwa9anNTV0SyaK6lt3DRsQa17XUVnBEow3rWbBbCdMdG7VGuY2IPauhaGcrS0NyaHeNy/pVJwUJyKZBdtGMbsj0rStxbzIZp5kSJeuTz+FNu25nZoz4oJJn2qCSfSrMn2LS4y1zIJJu0Sn+dUtR16OI+XYJ5ajI39zXNyzvK5Z2JJ9a5KuItpE0jTb1Zf1TV5r9iDhIx0ReBWPjJqQsaYDya4Zyu9TZJIXbmkXJYAc1JFE8rhUBJNbdvpUVnH9ou3C+i9ya56lVRRSVzNudPkjjWRhwwqmIxnFa99f8A2sBI12xr0FZRVgTXJFu2onuBXFRgNu4zUpycA0pBUDpVXEOBIGM80Ece9RgsMmnh8ilYBypv6mlaPaKi3kVNCss7BVQsaGmIahYMNuc1uadpFzcqsspCx5wM9TT9O0ck72XLDtWq/mxlgScKvAFS7WAsWgtrFtjIAP7w5qS+8QQra/Z4347Y61g3upr5QRMGTvWLJKoBkd8vnoKqNLm3KSJ7+/aTKgkD1FZn2qZThXLVIElvZ1SGMkk9BXcaB4FURi71NxGi8kNxVtqC0H6HNaL4bvdZm4jITuxr0fSdJtNG221pb/a789l6L9T2rb0fR7zVWFtpcH2azHBnK/M30r07w74NstGhUiMNIeSx5JNQ25BY5jQPAs99Ml9rDeY45WPHyp9BXo9pYwWcQSJAoHoKsKoUYAwKWhJLYYUUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAqXun299E0csasCO4rzTXfAt1pVy+oaFJ5Uh5aPqj/UV6tSMquMMMijcD58vLDTvEQa2vIRYasOqtwr+4Nec694SvNJuGLxkAH5WHevp7xJ4JsdagbMYEnUMOCD7GvO9RtL3R1NjrlubzTgNqzqmXjHv61GsdhW7HhHntGcSA5HGatWF2WnEcvzRmu617wIk1p9u0lhcW78jb2rz25srixlIKspHUVspKasxX7nYKLaGEmEiWXHCjoKxpme4nMZQFicYPaqNjfvC4aGTYQOc1PLfCZxuwr+oqZQfyC1tiK/0WSD51IPtWUAVJB6iujuJzNaKfmJzjNQvopaHzHbLMM8VMdiTEB5yKvWk+w4J4qvc2ktuSCMj1FQh9o6c0nG6A6FZQQT2qWNw/YVhQXTD5c8GtOCQ44YVzyhYC1jJOaZLB5ybFTJ7Vo2GmT3zKI0OD37V1Wn6JBZn978z+4rPmsy4xctjym60yeD52jZfQ4pkF0yHZL+de63Gjafq1l5TxqjgcMB1ryjxH4f/s68aJCCfau2hjJQkEotbkFpOWQEdvSkLAuQetZdvNJZS85K9wat/aYpyWQ4Poa9+jiY1I6bmNtdS2MH61UumOwjPFPSTPU0ycAxkmt6jvDQErMzGJPWmbe9OcYbikyAMHrXlyZoJxV6z0i4ulMir8gGSTVdLd1HmOML/Orn266Nt5CSFI/QVyVavSI9OpZTULTToWSKINcdNx6CsuW7kuHLyuSfQmoXjIYknNREEGsbLcL3LKSDdxTmYHniqasQetSq3Sk4isSbMkGpGjIGaiDHdkVMrEn5ulS7iIeOSaiwS3A4q4se9wqLuJ6Ct7StGgLB7k8/3afNYZkWOmzXRBC/L3Jrpbe1tbO2BUjzvWryW0UFrIUO1ccCufvLpIl3AOeehp7uyCxuf2lDYQGRipkPYd6yLjXTfHZGoUnjisgXnmuS5GD39KqktNPttlPPHHetFFLVjskFzIEuG2nc3QkVc0jQLvWJwI0OzuxrovD/AIHaYC81E+VEOcE9RXoGkaTPfuttolv5NsODcFev0/xqZT6Ie5i6V4fstDVAifab9h8sa8n8fQV3+g+CLrU5I7rVz8o5WAfdX/E11HhzwVZ6Sgkdd8x5Z25JNdYqKi4UYFSl1YytZadb2MKxwxhQB2FW6KKYBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFU77Tre/haOaNWBHcVcooA8r1jwXeaLcvf6IwGcl4G5R/w/rXGXul6d4ila3lh+w6l3jcYDH2NfQrIrrhgCK5TxJ4JstYiLhAkw5V14IPsalq+wmj5g1/wreaXO4aMgDuKwUmEZ8uVOfWver+1udJD2ev27XVmeEuVXLJ/vev1rhvEHghWjN7YETW7jKsvNVGo47i2Odt54VhhR0BQHJINT3F7FwkD5x/B7Vz80N1Ykoc4HY9qiiuVQhlyHPXPer5U9huzN57gNbuskIyx4J7VkXlqoBeIfL3p9xftK6iU4wMACnRRsXGcsh7+lQ1YmxlrkHkVctpxHKjSAsoPIz1q5qUVksaCHJf+I1lNHIqbsHb60tGgPTvDet2rgqpRGA+VTXTnUbW1tpJLmSMOw5JPSvCoZ5EcMjEN2xW5psxmvoxqk7rBnqawlh7vRmyqpLY7v8AtfUdRma30dD5XQykcCqN6tvpTZuY2vrqQfM3ZauWEv2y2klgla202M7Qsf35DVO91m6luUt7bTwEAwAwyzfWm4KKt1E3fcz9Y8P28mmpqVuQIn6g8EH0rjZbV4xvUEelegXySwpHLrLiODqtrGeT9axr121iVEtLQRQjhVFVByp7MiSW6OUjuXQ4kH41aMgkh65q7qeiy2z7GwzkZwOSKxo91tKARkA8g16NHGvlsySeGykuH4+Ve7HpTrq3ggAVJPMfuewqS71N5ohGiiNB2XvWfvJ6HNcs6kpsptFgnI5YmmjcT1qAOwbmp0x13Vm1YgQgA80xkB5p82McHkVCHJb6U0MaY8E4pMMB0qYFc+lPRfMO1Rk079wuQo4AxirK849KsW+mtJKQcbgOhNWLe3BmwVGM4IpOwiSzktoT5i8yDoCO9WjPHK7SmXa/ftVO5MSNiFAPRazZZHEmXJA7inGF9Ro2H1OS4/dRsSFHJzWbdXjBirYJ9Kp+e4YpEDluOOtdJ4f8G3WpkXFzlIQeS1acygrFXMjTNHvNXuNsEZwepxwK9H0Xw3ZaGqmdRPeN92NRlj9BW1omkyMws9FgBUcNckZUfT1r03w54IttNAnuMy3Dcs78k1ldyCxzGi+DLvWXSfUx5dupyluvQfX1r0zT9LttOhWOGNVAHYVcSNY1CqAAKdQlYYUUUUwCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooApX+mW+oQtHNGrAjuK831jwbe6LM93oxBjOS9u/KN+HY16rTXRXXDDIoauB8+Xug6Z4iDokZtNSUZeBxj8vWvMta8M3OmzuGjZdp4OOtfUfiPwTaashkjXy515V04IP1rz/AFW2ms1az8QW/mwAbUu405H+8P61KvHbYR89srI/7wHOaurfuQqgYQcYFd74j8BlYvtWnlZ7d+Qy9q89urKaylIZTxVqSkK5emuIpIQrIFI6DHNOtIlnjKSOQmOOOprMXbIS7Ofzq7ZX6DbFKvyA9RSlCy0E0SXejy2kaSgjJ5Cg9qhS58+VUuSQoNasSvcxsVOM9z0ArLv4I45NqsWbuaSXRgasNzqGlxsbKc+U3JA5xW7od+Ws3njk8zUnJA3npXFxXM9qqq5YRN1HqK04YRdkSWkwidecA9KmTtuNOxuf2TeS3v2jVpgoPJaQ/wAqvhTdJ5elIYbeMfvLpxgY9q5uxv7eO7Y6u08wT7oLcGte21S21Nne9ufIs0+7axdWFHL1KTVzT0uXT/tZtLWI3LSDE11J0X6Vga/4a8uWa4t5FkiU8spyBW4IhqcW22iXTNNXrIxwz1jajqRkhbStKQtbD7z93PrUSi001uU+VrU5CSErn0qBRgZr0uHR9LHh5ft7x21zjjLZLVxOp6YLSfZC/mL1yvarU9bMzaa3Mg5zmgO27IqQpjrxio2U9q03ENbOSc805WPek2Mxx61YhtNzYkO3inbQB1rZyXRJX7q9TWhbSQ2UhGzdnuRTbS4+xuQqhvr0qWQx3RMpZVkHXnioceb0AsTLIzfaTtiRugz1qhc6g6KBGBx0bFR3V2SfJLHavr3qlPKZiAq4+lOMLbjsDzyM/ml8sasW1rdalMscSM59hWroHhK71Z1kdSkGeSa9P0PQooWFppNqs0o4aYj5VP17/QU3K2iHqc7ong6005UuNRO+Y8pGBkk+gFej6J4QvNZKNdp9nsh92Be4/wBr1+ldP4d8Dw2jC6vT51yerN29h6V2scSRIFRQAKm3VjKOmaNa6ZAscMSrgdhWjRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqjqGl22oQtHNGrAjuKvUUAeUax4Pv9Dle50g7oScvbPyjf4Vx9/oGneI1kEafZL8Z3wOMH8PUV9CuiyKVYAg1yHiPwTaaovnQjyrheVkTgg/WpceqE0fLmteFrrS52DRsuD3HBrJiaKKQNMh3A9PWvedUt5bVjaeI7bzbcDal2icj/eH9a4jxH4CMVv9qscTQP8AMrLzxVKdnaQjhZdR3kCLKKP4R0pUPmSq2Mt6GqtxZTWcxDqeKYsuPmDEHPSrtfYNzoyILpGS62IQuFI7Vmtay2zGa0dgg4BPGaWxliYsZ+WP3c9K2Y7V7pDt2hVHc/yrNx5WIxI7lLiQi7B8zGFqe1km0u4W4SNJFH94ZFPu9Nyu/wDj9u1Y08lwp8tnJUflT5ddAR3VjZS+KArPqADk58nOAo+lT3WoWfhtWsrCz866YYMzjp9BXAWmoXFpOskTlHXkEVsWGsm41eO51F94HtUuPYpPUnjtbu51COXUQ4jc5y3StW91OC3lW0h01PKyBv6k1JNdX1/HJHI0Jt25WQkDYKx/EGr20kUFpafMYgB5gHWpcW7XRXTuM8S2NtazxvCf9YuSo7VjQ2klzIEjU/WtW0sZL2Fppn3EdATzT1uXthtSNBt6cU4+6rGel9CBNLEIH8UnpTZbSSOQSTqQPWtnSDFiWe5uFAx0xk1Q1HUPPZ4gAIh0rSN2FilcxxttEB3E9fas+5jSJyFfkdR6057sRbljOSeuKvaJ4bu9auFIUrGTyx6Ve2hWhlw2s97KscSM7ngYFeg6F4NhsES61TBY/djxkk+mK6PQ/D0Vi4tdNtluLvo0pGVT6/4V6d4e8DrE63mot51x6t0X2A7Vk23sFjmNC8J3mroqvEbSx/55jhnHuf6V6fpOhWmlW6xwxKMDsK0YYI4ECooAHpUlCVhhRRRTAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigChqOk22owtHNGrZHcV5zqfhXUPD0slxpIEtu3L20nKn6ehr1WmvGsilWAINDVwPn7UvDuneJElktU+z3i/ftnGCD/AIV5drnhm60uZg0ZHNfUfiHwVb35+022YblOUkTgg1wuqQYBsvEduAeiXqrx/wAC9Pr0qdY7E2Pn+Oby22SLyOKmN3JDIDHIfzrvfFHw/lgX7VaATQMMhk5rz2SCWzmZZIyyj1rVSU0O9y3AZLibbvOTycmtH7PC0OZISG6KO31rHa53sHhG0r+da1ncSz4e5chAPvGhx1JaMy9skjYmI7vUCs3JB6Yro724iaJhbrtB6+prPgsluULMwUjopqU+4yvA0kvyBmx3Ga3LLRke2aXzF3+/ao7RoLdWRoO2Cwoe7EUWVY+WT933qXd7CHw28kUhWR2SM9WHelumhEnkxbdv949qrSa4TB5Qj59T1FZZuyjHBLfWtFFdRpdyw10bZnQHhuKqb5rqQRxqST2FX9L0S/125AiiYqTy2OBXpWg+E7XTZEhgg+23x64+6h9zQ520Gc1oHgj5Be6mQkfBCnvXqOgeFbnUo0hhhNpYjvjDv/gK6jQPBBaRLvUyJJB91cYVPYCu8gtoreMJGoAHpWdr7gZejeHbLSLdY4YlBA9K2cYoopjCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKz9S0i11KFo5o1bI7itCigDyzUPDeo+HGkk05RcWTfftZORj/Z9K4vU/CWneI0lm03MN0ozJbSDDKfpX0JJGsilXAIPrXH+IfBUF632q0Jguk5SROCDUtdUKx8tav4fu9KuGR42Vh7Vl/aps7GOMV9BapaRXA+w+I7cRTZ2x3iLhG/3vQ/pXnHizwDPp0jyRLvi6h16VUZtaSC9jjkk8pFmOHGcVYN1B5e4KN59O1Z7xzWZ2OCVB6VH5okbIAUelXyp6oRq75WjUNgR5yB61SnlZ5AWAAXsKab4qvPLY4NFlY3mrXKxQozEnqKLJbD2IpZGuZsRpnPAAFdZ4f8ESXGLrUW8mAckN3rodA8GQ6fIhkjN1fHBWJe3uT2r1nQfBEk7x3WqEMV5WIDCp9B/Wocm9gOX8PeGLi9RYLCFrSzHBkxh3Ht6fz+leo6H4YstHgVY4l3dzjmte2tIbWMJEgAHoKnosMAABgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBnano1rqcDRzRq2R3Fef6h4evtA3rBH9s01vvWz8lR/sHt9On0r1GmSRJKpV1BBpNXA+eNZ8GWWtW8t3pJ+Zf9ZbsMOh9xXleraHPp8xVo2U+mK+rNd8GpcSfbLB2t7pejx8H6H1HtXF6npEl7tj1DSN95GflkiX5ZPr6UleImjxbQPB91qZE0/wC5txyztxxXrHhnwm0iLBpluYov4rll+Zv90f1NdVoHgaS4KTagoWNTlIF+6v8Aia9EtLGCziCRIFA9BT1e4WMbQfClnpEQIQNIeWZuST7muhACjAGBS0UxhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFRNbxM2SgJ+lS0UAIFCjAGBS0UUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//2Q==\"},{\"partUri\":\"/media/image1.png\",\"contentType\":\"image/png\",\"content\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAADAFBMVEV4eHiTk5P29vaBgYGcnJzAwMC3t7eKiorS0tLt7e3b29vk5OTJycn///9vb28AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD61b95AAAAyklEQVR42q2SSQ6FIAxAWzQxkcj976lEE5R+hojQOmw+Cxa8RwcoGnhf6oNDD0AvGL8j/E2wC+JiXwSaAKbbatGkLjBrX13szynmtPXnKc2eCRiMGQtXxrq2hmZRuuXx6SVdPlPpopeC387sFMMIwdsyAMFAEcHuptW5oIaKYgjHBBoZ512snMeJ8g7o0DmA5jwKXRdqy9W6gfMzhd7iMOySlxq0qn/z4leR43HNQ8WrLtYi1Dz+pnjsmt/8ZsulwLgQOOeC4EyQHH5z1GUZiLNTtwAAAABJRU5ErkJggg==\"}]}"},{"id":1698,"title":"Connect Four: find winning move","description":"Inspired by \u003chttp://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker this problem\u003e...\r\n\r\n\u003chttp://en.wikipedia.org/wiki/Connect_Four Connect Four\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\r\n\r\n*Problem Statement*\r\n\r\nGiven an array (size is arbitrary) in which\r\n\r\n* 0 : space is empty\r\n* 1 : player 1 piece\r\n* 2 : player 2 piece\r\n\r\nreturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\r\n\r\n*Assumptions*\r\n\r\n* Pieces fall to the bottommost available row in each column, as in the real game\r\n* The input grid will always represent a valid game state\r\n\r\n*Example*\r\n\r\nIf\r\n\r\n  b = [0 0 0 0 0 0 0;\r\n       0 0 0 0 0 0 0;\r\n       0 0 0 2 0 0 0;\r\n       0 0 0 1 0 0 0;\r\n       0 0 0 2 2 0 0;\r\n       0 0 2 1 1 1 0];\r\n\r\nthen\r\n\r\n  y = 7\r\n","description_html":"\u003cp\u003eInspired by \u003ca href = \"http://www.mathworks.com/matlabcentral/cody/problems/90-connect-four-win-checker\"\u003ethis problem\u003c/a\u003e...\u003c/p\u003e\u003cp\u003e\u003ca href = \"http://en.wikipedia.org/wiki/Connect_Four\"\u003eConnect Four\u003c/a\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\u003c/p\u003e\u003cp\u003e\u003cb\u003eProblem Statement\u003c/b\u003e\u003c/p\u003e\u003cp\u003eGiven an array (size is arbitrary) in which\u003c/p\u003e\u003cul\u003e\u003cli\u003e0 : space is empty\u003c/li\u003e\u003cli\u003e1 : player 1 piece\u003c/li\u003e\u003cli\u003e2 : player 2 piece\u003c/li\u003e\u003c/ul\u003e\u003cp\u003ereturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\u003c/p\u003e\u003cp\u003e\u003cb\u003eAssumptions\u003c/b\u003e\u003c/p\u003e\u003cul\u003e\u003cli\u003ePieces fall to the bottommost available row in each column, as in the real game\u003c/li\u003e\u003cli\u003eThe input grid will always represent a valid game state\u003c/li\u003e\u003c/ul\u003e\u003cp\u003e\u003cb\u003eExample\u003c/b\u003e\u003c/p\u003e\u003cp\u003eIf\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003eb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 0 0 2 2 0 0;\r\n     0 0 2 1 1 1 0];\r\n\u003c/pre\u003e\u003cp\u003ethen\u003c/p\u003e\u003cpre class=\"language-matlab\"\u003ey = 7\r\n\u003c/pre\u003e","function_template":"function y = c4win(b)\r\n  y = [];\r\nend","test_suite":"%%\r\nb = zeros(6,7);\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 0 0 2 2 0 0;\r\n     0 0 2 1 1 1 0];\r\ny_correct = 7;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 2 1 2 2 0 0;\r\n     2 1 2 1 1 1 0];\r\ny_correct = 7;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 0 0 0;\r\n     0 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     0 0 0 1 1 0 0;\r\n     2 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = 5;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 2 0 0 0;\r\n     2 0 0 1 1 1 0;\r\n     2 2 1 2 2 1 0;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [3 5 6];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [2 2 1 2 1 2 1;\r\n     1 2 2 1 2 2 2;\r\n     2 1 1 2 2 1 1;\r\n     1 2 1 1 1 2 1;\r\n     2 2 1 2 2 1 1;\r\n     2 1 2 1 1 1 2];\r\ny_correct = [];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     2 1 0 0 0 0 0;\r\n     2 2 1 1 0 0 0;\r\n     1 2 2 1 0 0 0];\r\ny_correct = 1;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 0 0 0 0 0 0;\r\n     0 1 2 0 0 2 0;\r\n     0 1 1 0 1 2 0;\r\n     0 1 2 1 2 2 0];\r\ny_correct = [2 4];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 2 2 0 0 0;\r\n     0 0 0 2 1 1 0 0 0;\r\n     0 0 2 1 2 2 0 0 0;\r\n     0 0 1 2 1 1 0 0 0;\r\n     1 0 1 1 2 2 0 0 0;\r\n     2 2 1 2 1 1 0 0 0];\r\ny_correct = 2;\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 0 0 2 0;\r\n     0 0 0 0 0 2 2 1 1;\r\n     0 0 0 0 0 2 1 2 2;\r\n     0 0 0 0 0 1 2 1 1;\r\n     0 0 0 1 0 1 1 2 2;\r\n     0 0 0 2 2 1 2 1 1];\r\ny_correct = [5 9];\r\nassert(isequal(c4win(b),y_correct))\r\n\r\n%%\r\nb = [0 0 0 0 0 2;\r\n     0 0 0 1 0 1;\r\n     0 0 0 1 0 2;\r\n     0 1 0 1 0 1;\r\n     0 2 1 2 0 2;\r\n     1 2 2 2 0 1;\r\n     2 2 1 1 0 2];\r\ny_correct = [4];\r\nassert(isequal(c4win(b),y_correct))","published":true,"deleted":false,"likes_count":2,"comments_count":0,"created_by":4793,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":29,"test_suite_updated_at":"2013-07-07T23:16:13.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2013-07-07T21:57:33.000Z","updated_at":"2025-06-13T11:30:13.000Z","published_at":"2013-07-07T23:16: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\u003eInspired by\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/90-connect-four-win-checker\\\"\u003e\u003cw:r\u003e\u003cw:t\u003ethis problem\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e...\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:hyperlink w:docLocation=\\\"http://en.wikipedia.org/wiki/Connect_Four\\\"\u003e\u003cw:r\u003e\u003cw:t\u003eConnect Four\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e is a fun two-player game in which the goal is to be the first player to connect four pieces in a row - horizontally, vertically, or diagonally. Players take turns dropping one of their pieces into any of the available columns.\u003c/w:t\u003e\u003c/w:r\u003e\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\u003eProblem Statement\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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 an array (size is arbitrary) in which\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\u003e0 : space is empty\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\u003e1 : player 1 piece\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\u003e2 : player 2 piece\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ereturn the column that player 1 should play in to win the game. If there is more than one winning move, return a row vector of appropriate columns. If there are currently no winning moves, return [].\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAssumptions\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\u003ePieces fall to the bottommost available row in each column, as in the real game\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\u003eThe input grid will always represent a valid game state\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eExample\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIf\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[b = [0 0 0 0 0 0 0;\\n     0 0 0 0 0 0 0;\\n     0 0 0 2 0 0 0;\\n     0 0 0 1 0 0 0;\\n     0 0 0 2 2 0 0;\\n     0 0 2 1 1 1 0];]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003ethen\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[y = 7]]\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003c/w:body\u003e\u003c/w:document\u003e\"},{\"partUri\":\"/matlab/output.xml\",\"contentType\":\"text/xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\" ?\u003e\u003cembeddedOutputs\u003e\u003cmetaData\u003e\u003cevaluationState\u003emanual\u003c/evaluationState\u003e\u003clayoutState\u003ecode\u003c/layoutState\u003e\u003coutputStatus\u003eready\u003c/outputStatus\u003e\u003c/metaData\u003e\u003coutputArray type=\\\"array\\\"/\u003e\u003cregionArray type=\\\"array\\\"/\u003e\u003c/embeddedOutputs\u003e\"}]}"},{"id":43574,"title":"Connect 4 (the boardgame)","description":"You are playing the popular game \"Connect 4\" ( \u003chttps://en.wikipedia.org/wiki/Connect_Four\u003e) against Matlab. Luckily, Matlab isn't trying to hard and just places its chips randomly.\r\n\r\nWrite a function which plays the game for you. As starting point you are given the same function which you opponent is using (random placement). But you'll have to do better, because you will have to crush Matlab by winning 10 games in a row in order to pass this test!\r\n\r\nEach time your function as called it is your turn to make a move. The input of the function is a 5x7 matrix, representing the game board, containing either \"1\" (a chip of your opponent), \"2\" (one of your chips) or \"0\" (an empty space). Calculate your best move and output the column index of your next chip (make sure this column isn't full yet or your turn is lost).\r\n\r\nGood luck!","description_html":"\u003cp\u003eYou are playing the popular game \"Connect 4\" ( \u003ca href = \"https://en.wikipedia.org/wiki/Connect_Four\"\u003ehttps://en.wikipedia.org/wiki/Connect_Four\u003c/a\u003e) against Matlab. Luckily, Matlab isn't trying to hard and just places its chips randomly.\u003c/p\u003e\u003cp\u003eWrite a function which plays the game for you. As starting point you are given the same function which you opponent is using (random placement). But you'll have to do better, because you will have to crush Matlab by winning 10 games in a row in order to pass this test!\u003c/p\u003e\u003cp\u003eEach time your function as called it is your turn to make a move. The input of the function is a 5x7 matrix, representing the game board, containing either \"1\" (a chip of your opponent), \"2\" (one of your chips) or \"0\" (an empty space). Calculate your best move and output the column index of your next chip (make sure this column isn't full yet or your turn is lost).\u003c/p\u003e\u003cp\u003eGood luck!\u003c/p\u003e","function_template":"function c = move(board)\r\n    % - the input board is a 5x7 matrix containing 0,1,2: The elements 0 are\r\n    % empty spaces, 1 are chips of your opponent and 2 are your chipt.\r\n    % - the output c is the column of your next chip, make sure this column\r\n    % has space left for your chip or the turn goes lost!\r\n\r\n    % select random available column\r\n    allC = find(sum(board~=0,1)\u003c5,7); % all not yet full columns\r\n    c = allC(randi(length(allC),1,1)); % random placement\r\nend","test_suite":"%%\r\ngames = 10;\r\nwinners = zeros(games,1);\r\nfor gamenum = 1:games % you play \"games\" different games\r\n    % init the board\r\n    board = zeros(5,7);\r\n    % function finding the index at which the chip will fall in column c\r\n    index = @(c,board) find(board(:,c)==0,1,'last');\r\n    % start the game\r\n    whoWon = 0;\r\n    done = false;\r\n    turn = 1;\r\n    while done == false\r\n        if turn == 1 % you oppenent's turn\r\n            % select random column\r\n            allC = find(sum(board~=0,1)\u003c5,7); % all not full columns\r\n            c = allC(randi(length(allC),1,1)); % random placement\r\n            % place chip in column c\r\n            board(index(c,board),c) = 1;\r\n        else % your turn\r\n            % which column\r\n            c = move(board);\r\n            % place chip in column c\r\n            i = index(c,board); % index\r\n            if ~isempty(i)\r\n                board(i,c) = 2;\r\n            else\r\n                disp('You have selected a full column, your turn goes lost')\r\n            end\r\n        end\r\n\r\n        % check for a 4-in-a-row\r\n        temp = board==turn;\r\n        % gather all possible 4-in-a-row lines\r\n            lines = cell(22,1);\r\n            % horizontal\r\n            for i = 1:5\r\n                lines{i} = temp(i,:)';\r\n            end\r\n            % vertical\r\n            for i = 1:7\r\n                lines{i+5} = temp(:,i);\r\n            end\r\n            % diagonal \\\r\n            lines{13} = diag(temp(2:end,:));\r\n            for i = 1:4\r\n                lines{i+13} = diag(temp(:,i:end));\r\n            end\r\n            % diagonal /\r\n            temp = fliplr(temp);\r\n            lines{18} = diag(temp(2:end,:));\r\n            for i = 1:4\r\n                lines{i+18} = diag(temp(:,i:end));\r\n            end\r\n        for i = 1:length(lines)\r\n            % find the maximum number of the same chips in this row\r\n            temp = diff([0; lines{i}; 0]);\r\n            if max(find(temp==-1,7)-find(temp==1,7))==4\r\n                % game is won!\r\n                whoWon = turn;\r\n                done = true;\r\n            end\r\n        end\r\n        % is the board full without a winner?\r\n        if sum(board==0)==0\r\n            done = true;\r\n        end\r\n        % switch turns\r\n        turn = 3-turn;\r\n    end % end of one game\r\n    winners(gamenum) = whoWon;\r\nend\r\ndisp(['Game results (#won/#lost/#draw): ' num2str(sum(winners==2)) '/' num2str(sum(winners==1)) '/' num2str(sum(winners==0))])\r\n% Did you win all 10 games?\r\nassert(isequal(sum(winners==2),games))","published":true,"deleted":false,"likes_count":5,"comments_count":0,"created_by":94929,"edited_by":null,"edited_at":null,"deleted_by":null,"deleted_at":null,"solvers_count":16,"test_suite_updated_at":null,"rescore_all_solutions":false,"group_id":1,"created_at":"2016-10-18T09:14:38.000Z","updated_at":"2025-12-12T13:37:07.000Z","published_at":"2016-10-18T09:14:38.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\u003eYou are playing the popular game \\\"Connect 4\\\" (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:hyperlink w:docLocation=\\\"https://en.wikipedia.org/wiki/Connect_Four\\\"\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026lt;https://en.wikipedia.org/wiki/Connect_Four\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:hyperlink\u003e\u003cw:r\u003e\u003cw:t\u003e\u0026gt;) against Matlab. Luckily, Matlab isn't trying to hard and just places its chips randomly.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWrite a function which plays the game for you. As starting point you are given the same function which you opponent is using (random placement). But you'll have to do better, because you will have to crush Matlab by winning 10 games in a row in order to pass this test!\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eEach time your function as called it is your turn to make a move. The input of the function is a 5x7 matrix, representing the game board, containing either \\\"1\\\" (a chip of your opponent), \\\"2\\\" (one of your chips) or \\\"0\\\" (an empty space). Calculate your best move and output the column index of your next chip (make sure this column isn't full yet or your turn is lost).\u003c/w:t\u003e\u003c/w:r\u003e\u003c/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\"}]}"}],"no_progress_badge":{"id":53,"name":"Unknown","symbol":"unknown","description":"Partially completed groups","description_html":null,"image_location":"/images/responsive/supporting/matlabcentral/cody/badges/problem_groups_unknown_2.png","bonus":null,"players_count":0,"active":false,"created_by":null,"updated_by":null,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"created_at":"2018-01-10T23:20:29.000Z","updated_at":"2018-01-10T23:20:29.000Z","community_badge_id":null,"award_multiples":false}}