{"group":{"id":1,"name":"Community","lockable":false,"created_at":"2012-01-18T18:02:15.000Z","updated_at":"2025-12-14T01:33:56.000Z","description":"Problems submitted by members of the MATLAB Central community.","is_default":true,"created_by":161519,"badge_id":null,"featured":false,"trending":false,"solution_count_in_trending_period":0,"trending_last_calculated":"2025-12-14T00:00:00.000Z","image_id":null,"published":true,"community_created":false,"status_id":2,"is_default_group_for_player":false,"deleted_by":null,"deleted_at":null,"restored_by":null,"restored_at":null,"description_opc":null,"description_html":null,"published_at":null},"problems":[{"id":61275,"title":"The Quantum Knight's Tour on a Toroidal Hexagonal Board","description":"In this challenge, you must navigate a knight on a Toroidal Hexagonal Grid of size \r\nThe grid:\r\nWe use the Axial Coordinate System (q,r)\r\nThe grid is Toroidal: any move that goes off the edge wraps around to the opposite side. Formally, a position (q,r) is always treated as (mod(q,N),mod(r,N)).\r\nThe knight's move:\r\nOn a hexagonal grid, a \"Knight's move\" is defined by 12 possible jumping vectors (). These represent moving 2 steps in one axial direction and 1 step in another, or similar symmetries:\r\n\r\nThe goal:\r\nGiven the board size ,a starting position start_pos, an ending position end_pos, and a list of obstacles, find the minimum number of moves required to reach the destination.\r\nInput:\r\nN: Scalar ( board size )\r\nstart_pos: 1x2 vector []\r\nend_pos: 1x2 vector []\r\nobstacles: Mx2 matrix where each row is a blocked [ ]\r\nOutput:\r\nmin_steps: The shortest distance ( integer ). Return Inf if the destination is unreachable.\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 589.467px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 468.5px 294.733px; transform-origin: 468.5px 294.733px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this challenge, you must navigate a knight on a \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eToroidal Hexagonal Grid\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e of size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"32\" height=\"18\" style=\"width: 32px; height: 18px;\"\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe grid:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 61.3px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 451.5px 30.65px; transform-origin: 451.5px 30.65px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWe use the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAxial Coordinate System \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e(q,r)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 20.4333px; text-align: left; transform-origin: 423.5px 20.4333px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe grid is \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eToroidal:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e any move that goes off the edge wraps around to the opposite side. Formally, a position \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e(q,r)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is always treated as \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e(mod(q,N),mod(r,N))\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe knight's move:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 21px; text-align: left; transform-origin: 444.5px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eOn a hexagonal grid, a \"Knight's move\" is defined by 12 possible jumping vectors (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"38.5\" height=\"18\" style=\"width: 38.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e). These represent moving 2 steps in one axial direction and 1 step in another, or similar symmetries:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"522\" height=\"18\" style=\"width: 522px; height: 18px;\"\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe goal:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 21px; text-align: left; transform-origin: 444.5px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven the board size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(33, 33, 33);\"\u003eN\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e,a starting position \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003estart_pos\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, an ending position \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eend_pos\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and a list of \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eobstacles\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, find the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eminimum number of moves\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e required to reach the destination.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 81.7333px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 451.5px 40.8667px; transform-origin: 451.5px 40.8667px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e: Scalar ( board size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"35\" height=\"18\" style=\"width: 35px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003estart_pos:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e 1x2 vector [\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAkCAYAAAAZ4GNvAAAEeElEQVR4AeyXXWiTZxTH8zQfrK1us1t1s13Tj7nJ6Da2js0bYWOswzHG1rENdjE2BoPhvhhMJmxeKCJ6peiN4geIinqhVAQvtCoIImi9ELFS0zaRpEVrWz+rNknr7x/fhLxtEpO3QRESzp9z3vM85zznOc95zvumzPUU/0rBP6nDK2W+lHkHGSiVjYOkFcWklPmipNGBk1LmHSStKCalzBcljQ6c5JV5v9/fwG9DfX19AH4QnAW/8/wHfCNYzNoeUDBVV1fPwL4V/IO/fSAMtuDINDU1vYJ+N7gP2hsbG59Dn6Kcwbe0tHgx+q+srKwbizmxWOz9vr6+z40xH/HcZoxZB/9lYmKiEh4DBVNlZWXM7XZfwMcsY8xXxpga1jtKwuaPj48fweF3wAcWMvYqPEVZg9cuh4eHdzBzBdhaVVX1fTgcHkZ29fb23oCHgOgOi52U4ATBYPBeIBAIE/wJ7ONggKAj+NyGbhn4F530Z5ADyCnKGLwyzsQ1zPoWHGbHSzo7O6PICeJYn0F4AYh6PB7PRQnTAWu8ib0bPgB+RT7MxvaC1Zy2B7RaSWPoIWUMfmho6GeGhREysHSyEeWjwOczR3S8u7v7mgSnUDIIeKHsSdqL8NljY2Nr4RMgK00JnlprwNESLNxgZ09Pz1m4jci0FmpAqePsgE+LKJO5OHgbiF5i/fWRSGRID7kwJXgMv8FAgd3E6S5k2+5ra2vLOY0f0Gtz/fF4/DzytIgL24wDbcDF+h1k/RDPjyRb8GpbWHwKRF0c4ZRa9vl8i9B/rAng1GV+cIeUMpM/JSNOwrbTGO6mRnIItuDLy8tns/N51vxLxHXdkhOMtulHUPdR63KxCZWMoxaJnwTV1dXNQvgAiLpY/5iEfGAL3uv1ytEMy1D1nCoZtU70mwhYlxXRNcJxn5GQDl0+7s3L4un6bDJrNjL2GhAdoKtckZAPbMFHo9ERjG4D0es1NTWJQKnzKoLeDCIMnALKusrK1nd1MtyHTtBPBq+y4TbNzQXuzHuMK2l3sMmr1pmfIFvw1NsA2mR3WUB9dxDAfrITRn8X52pf7yLrYh2f3ELRv8UG34CLZuJvsXWP9JwJHnyq3jVW8PvCFrwuCqXwG57agWq5mQB0B37kOH+yAlNXGGPRTLV5DrvTIEn+ioqKmcmHyZwTnYPuHSAq+H1hC14e9Kom0C+BF3iCwWAzfC9j46AVqCtcpp11IduIeSGg7x/2Zr5mMDQ6OnoLnpFIVoT584ABf2aclEM5Jfhsc8nSXCLSy0n1foKF+7PNtT4vPmP+tsHBweQdyjbdsT7v4Kn7FlbRy8vFhVSLTHUi9Olk+KD7ixKL8jG3J32g2HK+wRsW/gSoZAboEMlLjcpGblrk/2h8fP/8nf4xh67olFfw/CloYuUvgKiXS52tZOLckeXU70rKKq+3pBw6Rc7gedksIpP76DjKdJ21yAJKoh39KvC8pXsiLGfwoVDoEJlsI5PPAnUEQd/WH6JfCmyfD497BzmDf9zBFLreUx38AwAAAP//WKWEIAAAAAZJREFUAwASIbZYotIIVQAAAABJRU5ErkJggg==\" width=\"23.5\" height=\"18\" style=\"width: 23.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eend_pos\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e: 1x2 vector [\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAkCAYAAAAZ4GNvAAAEeElEQVR4AeyXXWiTZxTH8zQfrK1us1t1s13Tj7nJ6Da2js0bYWOswzHG1rENdjE2BoPhvhhMJmxeKCJ6peiN4geIinqhVAQvtCoIImi9ELFS0zaRpEVrWz+rNknr7x/fhLxtEpO3QRESzp9z3vM85zznOc95zvumzPUU/0rBP6nDK2W+lHkHGSiVjYOkFcWklPmipNGBk1LmHSStKCalzBcljQ6c5JV5v9/fwG9DfX19AH4QnAW/8/wHfCNYzNoeUDBVV1fPwL4V/IO/fSAMtuDINDU1vYJ+N7gP2hsbG59Dn6Kcwbe0tHgx+q+srKwbizmxWOz9vr6+z40xH/HcZoxZB/9lYmKiEh4DBVNlZWXM7XZfwMcsY8xXxpga1jtKwuaPj48fweF3wAcWMvYqPEVZg9cuh4eHdzBzBdhaVVX1fTgcHkZ29fb23oCHgOgOi52U4ATBYPBeIBAIE/wJ7ONggKAj+NyGbhn4F530Z5ADyCnKGLwyzsQ1zPoWHGbHSzo7O6PICeJYn0F4AYh6PB7PRQnTAWu8ib0bPgB+RT7MxvaC1Zy2B7RaSWPoIWUMfmho6GeGhREysHSyEeWjwOczR3S8u7v7mgSnUDIIeKHsSdqL8NljY2Nr4RMgK00JnlprwNESLNxgZ09Pz1m4jci0FmpAqePsgE+LKJO5OHgbiF5i/fWRSGRID7kwJXgMv8FAgd3E6S5k2+5ra2vLOY0f0Gtz/fF4/DzytIgL24wDbcDF+h1k/RDPjyRb8GpbWHwKRF0c4ZRa9vl8i9B/rAng1GV+cIeUMpM/JSNOwrbTGO6mRnIItuDLy8tns/N51vxLxHXdkhOMtulHUPdR63KxCZWMoxaJnwTV1dXNQvgAiLpY/5iEfGAL3uv1ytEMy1D1nCoZtU70mwhYlxXRNcJxn5GQDl0+7s3L4un6bDJrNjL2GhAdoKtckZAPbMFHo9ERjG4D0es1NTWJQKnzKoLeDCIMnALKusrK1nd1MtyHTtBPBq+y4TbNzQXuzHuMK2l3sMmr1pmfIFvw1NsA2mR3WUB9dxDAfrITRn8X52pf7yLrYh2f3ELRv8UG34CLZuJvsXWP9JwJHnyq3jVW8PvCFrwuCqXwG57agWq5mQB0B37kOH+yAlNXGGPRTLV5DrvTIEn+ioqKmcmHyZwTnYPuHSAq+H1hC14e9Kom0C+BF3iCwWAzfC9j46AVqCtcpp11IduIeSGg7x/2Zr5mMDQ6OnoLnpFIVoT584ABf2aclEM5Jfhsc8nSXCLSy0n1foKF+7PNtT4vPmP+tsHBweQdyjbdsT7v4Kn7FlbRy8vFhVSLTHUi9Olk+KD7ixKL8jG3J32g2HK+wRsW/gSoZAboEMlLjcpGblrk/2h8fP/8nf4xh67olFfw/CloYuUvgKiXS52tZOLckeXU70rKKq+3pBw6Rc7gedksIpP76DjKdJ21yAJKoh39KvC8pXsiLGfwoVDoEJlsI5PPAnUEQd/WH6JfCmyfD497BzmDf9zBFLreUx38AwAAAP//WKWEIAAAAAZJREFUAwASIbZYotIIVQAAAABJRU5ErkJggg==\" width=\"23.5\" height=\"18\" style=\"width: 23.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eobstacles: \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMx2 matrix where each row is a blocked [ \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAkCAYAAAAZ4GNvAAAEeElEQVR4AeyXXWiTZxTH8zQfrK1us1t1s13Tj7nJ6Da2js0bYWOswzHG1rENdjE2BoPhvhhMJmxeKCJ6peiN4geIinqhVAQvtCoIImi9ELFS0zaRpEVrWz+rNknr7x/fhLxtEpO3QRESzp9z3vM85zznOc95zvumzPUU/0rBP6nDK2W+lHkHGSiVjYOkFcWklPmipNGBk1LmHSStKCalzBcljQ6c5JV5v9/fwG9DfX19AH4QnAW/8/wHfCNYzNoeUDBVV1fPwL4V/IO/fSAMtuDINDU1vYJ+N7gP2hsbG59Dn6Kcwbe0tHgx+q+srKwbizmxWOz9vr6+z40xH/HcZoxZB/9lYmKiEh4DBVNlZWXM7XZfwMcsY8xXxpga1jtKwuaPj48fweF3wAcWMvYqPEVZg9cuh4eHdzBzBdhaVVX1fTgcHkZ29fb23oCHgOgOi52U4ATBYPBeIBAIE/wJ7ONggKAj+NyGbhn4F530Z5ADyCnKGLwyzsQ1zPoWHGbHSzo7O6PICeJYn0F4AYh6PB7PRQnTAWu8ib0bPgB+RT7MxvaC1Zy2B7RaSWPoIWUMfmho6GeGhREysHSyEeWjwOczR3S8u7v7mgSnUDIIeKHsSdqL8NljY2Nr4RMgK00JnlprwNESLNxgZ09Pz1m4jci0FmpAqePsgE+LKJO5OHgbiF5i/fWRSGRID7kwJXgMv8FAgd3E6S5k2+5ra2vLOY0f0Gtz/fF4/DzytIgL24wDbcDF+h1k/RDPjyRb8GpbWHwKRF0c4ZRa9vl8i9B/rAng1GV+cIeUMpM/JSNOwrbTGO6mRnIItuDLy8tns/N51vxLxHXdkhOMtulHUPdR63KxCZWMoxaJnwTV1dXNQvgAiLpY/5iEfGAL3uv1ytEMy1D1nCoZtU70mwhYlxXRNcJxn5GQDl0+7s3L4un6bDJrNjL2GhAdoKtckZAPbMFHo9ERjG4D0es1NTWJQKnzKoLeDCIMnALKusrK1nd1MtyHTtBPBq+y4TbNzQXuzHuMK2l3sMmr1pmfIFvw1NsA2mR3WUB9dxDAfrITRn8X52pf7yLrYh2f3ELRv8UG34CLZuJvsXWP9JwJHnyq3jVW8PvCFrwuCqXwG57agWq5mQB0B37kOH+yAlNXGGPRTLV5DrvTIEn+ioqKmcmHyZwTnYPuHSAq+H1hC14e9Kom0C+BF3iCwWAzfC9j46AVqCtcpp11IduIeSGg7x/2Zr5mMDQ6OnoLnpFIVoT584ABf2aclEM5Jfhsc8nSXCLSy0n1foKF+7PNtT4vPmP+tsHBweQdyjbdsT7v4Kn7FlbRy8vFhVSLTHUi9Olk+KD7ixKL8jG3J32g2HK+wRsW/gSoZAboEMlLjcpGblrk/2h8fP/8nf4xh67olFfw/CloYuUvgKiXS52tZOLckeXU70rKKq+3pBw6Rc7gedksIpP76DjKdJ21yAJKoh39KvC8pXsiLGfwoVDoEJlsI5PPAnUEQd/WH6JfCmyfD497BzmDf9zBFLreUx38AwAAAP//WKWEIAAAAAZJREFUAwASIbZYotIIVQAAAABJRU5ErkJggg==\" width=\"23.5\" height=\"18\" style=\"width: 23.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20.4333px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 451.5px 10.2167px; transform-origin: 451.5px 10.2167px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003emin_steps:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e The shortest distance ( integer ). Return \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInf\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e if the destination is unreachable.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function min_steps = solve_knight(N,start_pos,end_pos,obstacles)\r\n  min_steps = N*start_pos*end_pos*obstacles;\r\nend","test_suite":"%%\r\nassert(isequal(solve_knight(10, [0,0], [2,1], []), 1))\r\n\r\n%%  \r\nassert(isequal(solve_knight(5, [0,0], [4,3], []), 1))\r\n\r\n%%  \r\nobs = [1,2; 2,1; 3,-1; 3,-2; 2,-3; 1,-3; -1,-2; -2,-1; -3,1; -3,2; -2,3; -1,3];\r\nassert(isinf(solve_knight(10, [5,5], [0,0], obs + 5)))\r\n\r\n%% Test Case 4: \r\nrand_N = randi([15, 25]);\r\nrand_start = randi([0, rand_N-1], 1, 2);\r\ntarget = mod(rand_start + [2, 4], rand_N);\r\nactual = solve_knight(rand_N, rand_start, target, []);\r\nassert(actual \u003c= 2);\r\n\r\n%% \r\nN_large = 200;\r\ns_large = [0, 0];\r\ne_large = [100, 100];\r\nres = solve_knight(N_large, s_large, e_large, []);\r\nassert(res \u003e 0 \u0026\u0026 ~isinf(res));\r\n\r\n\r\n%% \r\nN1 = 10; s1 = [0,0]; e1 = [0,0]; obs1 = [];\r\nassert(solve_knight(N1, s1, e1, obs1) == 0);\r\n\r\n%% \r\nN2 = 10; s2 = [0,0]; e2 = [2,1]; obs2 = [2,1];\r\nassert(isinf(solve_knight(N2, s2, e2, obs2)));\r\n\r\n%% \r\nN3 = 10; s3 = [1,2]; e3 = [5,5]; obs3 = [1,2];\r\nassert(isinf(solve_knight(N3, s3, e3, obs3)));\r\n\r\n%% \r\nN4 = 10; s4 = [0,0]; e4 = [1,2]; obs4 = [];\r\nassert(solve_knight(N4, s4, e4, obs4) == 1);\r\n\r\n%% \r\nN5 = 5; s5 = [0,0]; e5 = [1,2]; obs5 = [];\r\nassert(solve_knight(N5, s5, e5, obs5) == 1);\r\n\r\n%% \r\nN6 = 10; s6 = [5,5]; e6 = [0,0]; \r\nmoves = [1, 2; 2, 1; 3, -1; 3, -2; 2, -3; 1, -3; -1, -2; -2, -1; -3, 1; -3, 2; -2, 3; -1, 3];\r\nobs6 = [5,5] + moves; \r\nassert(isinf(solve_knight(N6, s6, e6, obs6)));\r\n\r\n%% \r\nN7 = 20; s7 = [0,0]; e7 = [2,0];\r\nobs7 = [1,2; 2,1; 3,-1; 3,-2; 2,-3; 1,-3; -1,-2; -2,-1; -3,1; -3,2; -2,3; -1,3]; \r\nres7 = solve_knight(N7, s7, e7, []);\r\nassert(res7 \u003e 0 \u0026\u0026 res7 \u003c Inf);\r\n\r\n%% \r\nN8 = 100; s8 = [0,0]; e8 = [50,50]; obs8 = [];\r\ntic;\r\nres8 = solve_knight(N8, s8, e8, obs8);\r\nt = toc;\r\nassert(res8 \u003e 0);\r\n\r\n%% \r\nN9 = 15; s9 = [-1,-1]; e9 = [14,14]; obs9 = [];\r\nassert(solve_knight(N9, s9, e9, obs9) == 0);\r\n\r\n%% \r\nN10 = 30; s10 = [5,5]; e10 = [25,5];\r\nobs10 = [(0:29)', ones(30,1)*15];\r\nres10 = solve_knight(N10, s10, e10, obs10);\r\nassert(res10 \u003e 0 \u0026\u0026 ~isinf(res10));\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":4945722,"edited_by":4945722,"edited_at":"2026-03-21T02:40:32.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2026-03-21T02:40:32.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2026-03-17T12:48:56.000Z","updated_at":"2026-03-22T12:58:42.000Z","published_at":"2026-03-17T12:48:56.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this challenge, you must navigate a knight on a \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eToroidal Hexagonal Grid\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$NxN$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe grid:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe use the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAxial Coordinate System \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(q,r)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe grid is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eToroidal:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e any move that goes off the edge wraps around to the opposite side. Formally, a position \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(q,r)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is always treated as \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(mod(q,N),mod(r,N))\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe knight's move:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn a hexagonal grid, a \\\"Knight's move\\\" is defined by 12 possible jumping vectors (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$dq,dr$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e). These represent moving 2 steps in one axial direction and 1 step in another, or similar symmetries:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\text{moves} = \\\\left[1,2; 2,1; 3,-1; 3,-2; 2,-3; 1,-3; -1,-2; -2,-1; -3,1; -3,2; -2,3; -1,3 \\\\right]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe goal:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the board size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$N$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e,a starting position \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estart_pos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, an ending position \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eend_pos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and a list of \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eobstacles\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, find the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eminimum number of moves\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e required to reach the destination.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e: Scalar ( board size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$N$x$N$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estart_pos:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 1x2 vector [\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$q,r$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eend_pos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e: 1x2 vector [\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$q, r$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eobstacles: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eMx2 matrix where each row is a blocked [ \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$q,r\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emin_steps:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e The shortest distance ( integer ). Return \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e if the destination is unreachable.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\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\"}]}"}],"problem_search":{"errors":[],"problems":[{"id":61275,"title":"The Quantum Knight's Tour on a Toroidal Hexagonal Board","description":"In this challenge, you must navigate a knight on a Toroidal Hexagonal Grid of size \r\nThe grid:\r\nWe use the Axial Coordinate System (q,r)\r\nThe grid is Toroidal: any move that goes off the edge wraps around to the opposite side. Formally, a position (q,r) is always treated as (mod(q,N),mod(r,N)).\r\nThe knight's move:\r\nOn a hexagonal grid, a \"Knight's move\" is defined by 12 possible jumping vectors (). These represent moving 2 steps in one axial direction and 1 step in another, or similar symmetries:\r\n\r\nThe goal:\r\nGiven the board size ,a starting position start_pos, an ending position end_pos, and a list of obstacles, find the minimum number of moves required to reach the destination.\r\nInput:\r\nN: Scalar ( board size )\r\nstart_pos: 1x2 vector []\r\nend_pos: 1x2 vector []\r\nobstacles: Mx2 matrix where each row is a blocked [ ]\r\nOutput:\r\nmin_steps: The shortest distance ( integer ). Return Inf if the destination is unreachable.\r\n\r\n","description_html":"\u003cdiv style = \"text-align: start; line-height: 20.44px; min-height: 0px; white-space: normal; color: rgb(33, 33, 33); font-family: Menlo, Monaco, Consolas, monospace; font-style: normal; font-size: 14px; font-weight: 400; text-decoration: none; white-space: normal; \"\u003e\u003cdiv style=\"block-size: 589.467px; display: block; min-width: 0px; padding-block-start: 0px; padding-inline-start: 2px; padding-left: 2px; padding-top: 0px; perspective-origin: 468.5px 294.733px; transform-origin: 468.5px 294.733px; vertical-align: baseline; \"\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eIn this challenge, you must navigate a knight on a \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eToroidal Hexagonal Grid\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e of size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"32\" height=\"18\" style=\"width: 32px; height: 18px;\"\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe grid:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 61.3px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 451.5px 30.65px; transform-origin: 451.5px 30.65px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eWe use the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eAxial Coordinate System \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e(q,r)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 40.8667px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 20.4333px; text-align: left; transform-origin: 423.5px 20.4333px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eThe grid is \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eToroidal:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e any move that goes off the edge wraps around to the opposite side. Formally, a position \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e(q,r)\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e is always treated as \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-style: italic; \"\u003e(mod(q,N),mod(r,N))\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe knight's move:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 21px; text-align: left; transform-origin: 444.5px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eOn a hexagonal grid, a \"Knight's move\" is defined by 12 possible jumping vectors (\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"38.5\" height=\"18\" style=\"width: 38.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e). These represent moving 2 steps in one axial direction and 1 step in another, or similar symmetries:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"522\" height=\"18\" style=\"width: 522px; height: 18px;\"\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eThe goal:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 42px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 21px; text-align: left; transform-origin: 444.5px 21px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eGiven the board size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"font-family: STIXGeneral-webfont, serif; font-style: italic; font-weight: 400; color: rgb(33, 33, 33);\"\u003eN\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e,a starting position \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003estart_pos\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, an ending position \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eend_pos\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, and a list of \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eobstacles\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e, find the \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eminimum number of moves\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e required to reach the destination.\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 81.7333px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 451.5px 40.8667px; transform-origin: 451.5px 40.8667px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eN\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e: Scalar ( board size \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,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\" width=\"35\" height=\"18\" style=\"width: 35px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e)\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003estart_pos:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e 1x2 vector [\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAkCAYAAAAZ4GNvAAAEeElEQVR4AeyXXWiTZxTH8zQfrK1us1t1s13Tj7nJ6Da2js0bYWOswzHG1rENdjE2BoPhvhhMJmxeKCJ6peiN4geIinqhVAQvtCoIImi9ELFS0zaRpEVrWz+rNknr7x/fhLxtEpO3QRESzp9z3vM85zznOc95zvumzPUU/0rBP6nDK2W+lHkHGSiVjYOkFcWklPmipNGBk1LmHSStKCalzBcljQ6c5JV5v9/fwG9DfX19AH4QnAW/8/wHfCNYzNoeUDBVV1fPwL4V/IO/fSAMtuDINDU1vYJ+N7gP2hsbG59Dn6Kcwbe0tHgx+q+srKwbizmxWOz9vr6+z40xH/HcZoxZB/9lYmKiEh4DBVNlZWXM7XZfwMcsY8xXxpga1jtKwuaPj48fweF3wAcWMvYqPEVZg9cuh4eHdzBzBdhaVVX1fTgcHkZ29fb23oCHgOgOi52U4ATBYPBeIBAIE/wJ7ONggKAj+NyGbhn4F530Z5ADyCnKGLwyzsQ1zPoWHGbHSzo7O6PICeJYn0F4AYh6PB7PRQnTAWu8ib0bPgB+RT7MxvaC1Zy2B7RaSWPoIWUMfmho6GeGhREysHSyEeWjwOczR3S8u7v7mgSnUDIIeKHsSdqL8NljY2Nr4RMgK00JnlprwNESLNxgZ09Pz1m4jci0FmpAqePsgE+LKJO5OHgbiF5i/fWRSGRID7kwJXgMv8FAgd3E6S5k2+5ra2vLOY0f0Gtz/fF4/DzytIgL24wDbcDF+h1k/RDPjyRb8GpbWHwKRF0c4ZRa9vl8i9B/rAng1GV+cIeUMpM/JSNOwrbTGO6mRnIItuDLy8tns/N51vxLxHXdkhOMtulHUPdR63KxCZWMoxaJnwTV1dXNQvgAiLpY/5iEfGAL3uv1ytEMy1D1nCoZtU70mwhYlxXRNcJxn5GQDl0+7s3L4un6bDJrNjL2GhAdoKtckZAPbMFHo9ERjG4D0es1NTWJQKnzKoLeDCIMnALKusrK1nd1MtyHTtBPBq+y4TbNzQXuzHuMK2l3sMmr1pmfIFvw1NsA2mR3WUB9dxDAfrITRn8X52pf7yLrYh2f3ELRv8UG34CLZuJvsXWP9JwJHnyq3jVW8PvCFrwuCqXwG57agWq5mQB0B37kOH+yAlNXGGPRTLV5DrvTIEn+ioqKmcmHyZwTnYPuHSAq+H1hC14e9Kom0C+BF3iCwWAzfC9j46AVqCtcpp11IduIeSGg7x/2Zr5mMDQ6OnoLnpFIVoT584ABf2aclEM5Jfhsc8nSXCLSy0n1foKF+7PNtT4vPmP+tsHBweQdyjbdsT7v4Kn7FlbRy8vFhVSLTHUi9Olk+KD7ixKL8jG3J32g2HK+wRsW/gSoZAboEMlLjcpGblrk/2h8fP/8nf4xh67olFfw/CloYuUvgKiXS52tZOLckeXU70rKKq+3pBw6Rc7gedksIpP76DjKdJ21yAJKoh39KvC8pXsiLGfwoVDoEJlsI5PPAnUEQd/WH6JfCmyfD497BzmDf9zBFLreUx38AwAAAP//WKWEIAAAAAZJREFUAwASIbZYotIIVQAAAABJRU5ErkJggg==\" width=\"23.5\" height=\"18\" style=\"width: 23.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eend_pos\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e: 1x2 vector [\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAkCAYAAAAZ4GNvAAAEeElEQVR4AeyXXWiTZxTH8zQfrK1us1t1s13Tj7nJ6Da2js0bYWOswzHG1rENdjE2BoPhvhhMJmxeKCJ6peiN4geIinqhVAQvtCoIImi9ELFS0zaRpEVrWz+rNknr7x/fhLxtEpO3QRESzp9z3vM85zznOc95zvumzPUU/0rBP6nDK2W+lHkHGSiVjYOkFcWklPmipNGBk1LmHSStKCalzBcljQ6c5JV5v9/fwG9DfX19AH4QnAW/8/wHfCNYzNoeUDBVV1fPwL4V/IO/fSAMtuDINDU1vYJ+N7gP2hsbG59Dn6Kcwbe0tHgx+q+srKwbizmxWOz9vr6+z40xH/HcZoxZB/9lYmKiEh4DBVNlZWXM7XZfwMcsY8xXxpga1jtKwuaPj48fweF3wAcWMvYqPEVZg9cuh4eHdzBzBdhaVVX1fTgcHkZ29fb23oCHgOgOi52U4ATBYPBeIBAIE/wJ7ONggKAj+NyGbhn4F530Z5ADyCnKGLwyzsQ1zPoWHGbHSzo7O6PICeJYn0F4AYh6PB7PRQnTAWu8ib0bPgB+RT7MxvaC1Zy2B7RaSWPoIWUMfmho6GeGhREysHSyEeWjwOczR3S8u7v7mgSnUDIIeKHsSdqL8NljY2Nr4RMgK00JnlprwNESLNxgZ09Pz1m4jci0FmpAqePsgE+LKJO5OHgbiF5i/fWRSGRID7kwJXgMv8FAgd3E6S5k2+5ra2vLOY0f0Gtz/fF4/DzytIgL24wDbcDF+h1k/RDPjyRb8GpbWHwKRF0c4ZRa9vl8i9B/rAng1GV+cIeUMpM/JSNOwrbTGO6mRnIItuDLy8tns/N51vxLxHXdkhOMtulHUPdR63KxCZWMoxaJnwTV1dXNQvgAiLpY/5iEfGAL3uv1ytEMy1D1nCoZtU70mwhYlxXRNcJxn5GQDl0+7s3L4un6bDJrNjL2GhAdoKtckZAPbMFHo9ERjG4D0es1NTWJQKnzKoLeDCIMnALKusrK1nd1MtyHTtBPBq+y4TbNzQXuzHuMK2l3sMmr1pmfIFvw1NsA2mR3WUB9dxDAfrITRn8X52pf7yLrYh2f3ELRv8UG34CLZuJvsXWP9JwJHnyq3jVW8PvCFrwuCqXwG57agWq5mQB0B37kOH+yAlNXGGPRTLV5DrvTIEn+ioqKmcmHyZwTnYPuHSAq+H1hC14e9Kom0C+BF3iCwWAzfC9j46AVqCtcpp11IduIeSGg7x/2Zr5mMDQ6OnoLnpFIVoT584ABf2aclEM5Jfhsc8nSXCLSy0n1foKF+7PNtT4vPmP+tsHBweQdyjbdsT7v4Kn7FlbRy8vFhVSLTHUi9Olk+KD7ixKL8jG3J32g2HK+wRsW/gSoZAboEMlLjcpGblrk/2h8fP/8nf4xh67olFfw/CloYuUvgKiXS52tZOLckeXU70rKKq+3pBw6Rc7gedksIpP76DjKdJ21yAJKoh39KvC8pXsiLGfwoVDoEJlsI5PPAnUEQd/WH6JfCmyfD497BzmDf9zBFLreUx38AwAAAP//WKWEIAAAAAZJREFUAwASIbZYotIIVQAAAABJRU5ErkJggg==\" width=\"23.5\" height=\"18\" style=\"width: 23.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003cli style=\"block-size: 20.4333px; display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eobstacles: \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003eMx2 matrix where each row is a blocked [ \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"vertical-align:-5px\"\u003e\u003cimg src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAkCAYAAAAZ4GNvAAAEeElEQVR4AeyXXWiTZxTH8zQfrK1us1t1s13Tj7nJ6Da2js0bYWOswzHG1rENdjE2BoPhvhhMJmxeKCJ6peiN4geIinqhVAQvtCoIImi9ELFS0zaRpEVrWz+rNknr7x/fhLxtEpO3QRESzp9z3vM85zznOc95zvumzPUU/0rBP6nDK2W+lHkHGSiVjYOkFcWklPmipNGBk1LmHSStKCalzBcljQ6c5JV5v9/fwG9DfX19AH4QnAW/8/wHfCNYzNoeUDBVV1fPwL4V/IO/fSAMtuDINDU1vYJ+N7gP2hsbG59Dn6Kcwbe0tHgx+q+srKwbizmxWOz9vr6+z40xH/HcZoxZB/9lYmKiEh4DBVNlZWXM7XZfwMcsY8xXxpga1jtKwuaPj48fweF3wAcWMvYqPEVZg9cuh4eHdzBzBdhaVVX1fTgcHkZ29fb23oCHgOgOi52U4ATBYPBeIBAIE/wJ7ONggKAj+NyGbhn4F530Z5ADyCnKGLwyzsQ1zPoWHGbHSzo7O6PICeJYn0F4AYh6PB7PRQnTAWu8ib0bPgB+RT7MxvaC1Zy2B7RaSWPoIWUMfmho6GeGhREysHSyEeWjwOczR3S8u7v7mgSnUDIIeKHsSdqL8NljY2Nr4RMgK00JnlprwNESLNxgZ09Pz1m4jci0FmpAqePsgE+LKJO5OHgbiF5i/fWRSGRID7kwJXgMv8FAgd3E6S5k2+5ra2vLOY0f0Gtz/fF4/DzytIgL24wDbcDF+h1k/RDPjyRb8GpbWHwKRF0c4ZRa9vl8i9B/rAng1GV+cIeUMpM/JSNOwrbTGO6mRnIItuDLy8tns/N51vxLxHXdkhOMtulHUPdR63KxCZWMoxaJnwTV1dXNQvgAiLpY/5iEfGAL3uv1ytEMy1D1nCoZtU70mwhYlxXRNcJxn5GQDl0+7s3L4un6bDJrNjL2GhAdoKtckZAPbMFHo9ERjG4D0es1NTWJQKnzKoLeDCIMnALKusrK1nd1MtyHTtBPBq+y4TbNzQXuzHuMK2l3sMmr1pmfIFvw1NsA2mR3WUB9dxDAfrITRn8X52pf7yLrYh2f3ELRv8UG34CLZuJvsXWP9JwJHnyq3jVW8PvCFrwuCqXwG57agWq5mQB0B37kOH+yAlNXGGPRTLV5DrvTIEn+ioqKmcmHyZwTnYPuHSAq+H1hC14e9Kom0C+BF3iCwWAzfC9j46AVqCtcpp11IduIeSGg7x/2Zr5mMDQ6OnoLnpFIVoT584ABf2aclEM5Jfhsc8nSXCLSy0n1foKF+7PNtT4vPmP+tsHBweQdyjbdsT7v4Kn7FlbRy8vFhVSLTHUi9Olk+KD7ixKL8jG3J32g2HK+wRsW/gSoZAboEMlLjcpGblrk/2h8fP/8nf4xh67olFfw/CloYuUvgKiXS52tZOLckeXU70rKKq+3pBw6Rc7gedksIpP76DjKdJ21yAJKoh39KvC8pXsiLGfwoVDoEJlsI5PPAnUEQd/WH6JfCmyfD497BzmDf9zBFLreUx38AwAAAP//WKWEIAAAAAZJREFUAwASIbZYotIIVQAAAABJRU5ErkJggg==\" width=\"23.5\" height=\"18\" style=\"width: 23.5px; height: 18px;\"\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e]\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eOutput:\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cul style=\"block-size: 20.4333px; font-family: Helvetica, Arial, sans-serif; list-style-type: square; margin-block-end: 20px; margin-block-start: 10px; margin-bottom: 20px; margin-top: 10px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 451.5px 10.2167px; transform-origin: 451.5px 10.2167px; margin-top: 10px; margin-bottom: 20px; \"\u003e\u003cli style=\"display: list-item; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-start: 56px; margin-left: 56px; margin-top: 0px; perspective-origin: 423.5px 10.2167px; text-align: left; transform-origin: 423.5px 10.2167px; white-space-collapse: preserve; margin-left: 56px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003emin_steps:\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e The shortest distance ( integer ). Return \u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003eInf\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"block-size: auto; display: inline; margin-inline-start: 0px; margin-left: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e if the destination is unreachable.\u003c/span\u003e\u003c/span\u003e\u003c/li\u003e\u003c/ul\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"font-weight: 700; \"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv style=\"block-size: 21px; font-family: Helvetica, Arial, sans-serif; line-height: 21px; margin-block-end: 9px; margin-block-start: 2px; margin-bottom: 9px; margin-inline-end: 10px; margin-inline-start: 4px; margin-left: 4px; margin-right: 10px; margin-top: 2px; padding-inline-start: 0px; padding-left: 0px; perspective-origin: 444.5px 10.5px; text-align: left; transform-origin: 444.5px 10.5px; white-space-collapse: preserve; margin-left: 4px; margin-top: 2px; margin-bottom: 9px; \"\u003e\u003cspan style=\"block-size: auto; display: inline; margin-block-end: 0px; margin-block-start: 0px; margin-bottom: 0px; margin-inline-end: 0px; margin-inline-start: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; perspective-origin: 0px 0px; transform-origin: 0px 0px; unicode-bidi: normal; \"\u003e\u003cspan style=\"\"\u003e\u003c/span\u003e\u003c/span\u003e\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e","function_template":"function min_steps = solve_knight(N,start_pos,end_pos,obstacles)\r\n  min_steps = N*start_pos*end_pos*obstacles;\r\nend","test_suite":"%%\r\nassert(isequal(solve_knight(10, [0,0], [2,1], []), 1))\r\n\r\n%%  \r\nassert(isequal(solve_knight(5, [0,0], [4,3], []), 1))\r\n\r\n%%  \r\nobs = [1,2; 2,1; 3,-1; 3,-2; 2,-3; 1,-3; -1,-2; -2,-1; -3,1; -3,2; -2,3; -1,3];\r\nassert(isinf(solve_knight(10, [5,5], [0,0], obs + 5)))\r\n\r\n%% Test Case 4: \r\nrand_N = randi([15, 25]);\r\nrand_start = randi([0, rand_N-1], 1, 2);\r\ntarget = mod(rand_start + [2, 4], rand_N);\r\nactual = solve_knight(rand_N, rand_start, target, []);\r\nassert(actual \u003c= 2);\r\n\r\n%% \r\nN_large = 200;\r\ns_large = [0, 0];\r\ne_large = [100, 100];\r\nres = solve_knight(N_large, s_large, e_large, []);\r\nassert(res \u003e 0 \u0026\u0026 ~isinf(res));\r\n\r\n\r\n%% \r\nN1 = 10; s1 = [0,0]; e1 = [0,0]; obs1 = [];\r\nassert(solve_knight(N1, s1, e1, obs1) == 0);\r\n\r\n%% \r\nN2 = 10; s2 = [0,0]; e2 = [2,1]; obs2 = [2,1];\r\nassert(isinf(solve_knight(N2, s2, e2, obs2)));\r\n\r\n%% \r\nN3 = 10; s3 = [1,2]; e3 = [5,5]; obs3 = [1,2];\r\nassert(isinf(solve_knight(N3, s3, e3, obs3)));\r\n\r\n%% \r\nN4 = 10; s4 = [0,0]; e4 = [1,2]; obs4 = [];\r\nassert(solve_knight(N4, s4, e4, obs4) == 1);\r\n\r\n%% \r\nN5 = 5; s5 = [0,0]; e5 = [1,2]; obs5 = [];\r\nassert(solve_knight(N5, s5, e5, obs5) == 1);\r\n\r\n%% \r\nN6 = 10; s6 = [5,5]; e6 = [0,0]; \r\nmoves = [1, 2; 2, 1; 3, -1; 3, -2; 2, -3; 1, -3; -1, -2; -2, -1; -3, 1; -3, 2; -2, 3; -1, 3];\r\nobs6 = [5,5] + moves; \r\nassert(isinf(solve_knight(N6, s6, e6, obs6)));\r\n\r\n%% \r\nN7 = 20; s7 = [0,0]; e7 = [2,0];\r\nobs7 = [1,2; 2,1; 3,-1; 3,-2; 2,-3; 1,-3; -1,-2; -2,-1; -3,1; -3,2; -2,3; -1,3]; \r\nres7 = solve_knight(N7, s7, e7, []);\r\nassert(res7 \u003e 0 \u0026\u0026 res7 \u003c Inf);\r\n\r\n%% \r\nN8 = 100; s8 = [0,0]; e8 = [50,50]; obs8 = [];\r\ntic;\r\nres8 = solve_knight(N8, s8, e8, obs8);\r\nt = toc;\r\nassert(res8 \u003e 0);\r\n\r\n%% \r\nN9 = 15; s9 = [-1,-1]; e9 = [14,14]; obs9 = [];\r\nassert(solve_knight(N9, s9, e9, obs9) == 0);\r\n\r\n%% \r\nN10 = 30; s10 = [5,5]; e10 = [25,5];\r\nobs10 = [(0:29)', ones(30,1)*15];\r\nres10 = solve_knight(N10, s10, e10, obs10);\r\nassert(res10 \u003e 0 \u0026\u0026 ~isinf(res10));\r\n","published":true,"deleted":false,"likes_count":1,"comments_count":2,"created_by":4945722,"edited_by":4945722,"edited_at":"2026-03-21T02:40:32.000Z","deleted_by":null,"deleted_at":null,"solvers_count":6,"test_suite_updated_at":"2026-03-21T02:40:32.000Z","rescore_all_solutions":false,"group_id":1,"created_at":"2026-03-17T12:48:56.000Z","updated_at":"2026-03-22T12:58:42.000Z","published_at":"2026-03-17T12:48:56.000Z","restored_at":null,"restored_by":null,"spam":null,"simulink":false,"admin_reviewed":false,"description_opc":"{\"parts\":[{\"partUri\":\"/matlab/document.xml\",\"contentType\":\"application/vnd.mathworks.matlab.code.document+xml\",\"content\":\"\u003c?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?\u003e\u003cw:document xmlns:w=\\\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\\\"\u003e\u003cw:body\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eIn this challenge, you must navigate a knight on a \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eToroidal Hexagonal Grid\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e of size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$NxN$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe grid:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eWe use the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eAxial Coordinate System \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(q,r)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eThe grid is \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eToroidal:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e any move that goes off the edge wraps around to the opposite side. Formally, a position \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(q,r)\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e is always treated as \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:i/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e(mod(q,N),mod(r,N))\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe knight's move:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eOn a hexagonal grid, a \\\"Knight's move\\\" is defined by 12 possible jumping vectors (\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$dq,dr$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e). These represent moving 2 steps in one axial direction and 1 step in another, or similar symmetries:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"true\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e\\\\text{moves} = \\\\left[1,2; 2,1; 3,-1; 3,-2; 2,-3; 1,-3; -1,-2; -2,-1; -3,1; -3,2; -2,3; -1,3 \\\\right]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eThe goal:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003eGiven the board size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$N$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e,a starting position \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estart_pos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, an ending position \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eend_pos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, and a list of \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eobstacles\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e, find the \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eminimum number of moves\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e required to reach the destination.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eN\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e: Scalar ( board size \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$N$x$N$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e)\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003estart_pos:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e 1x2 vector [\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$q,r$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eend_pos\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e: 1x2 vector [\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$q, r$\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eobstacles: \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003eMx2 matrix where each row is a blocked [ \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:customXml w:element=\\\"equation\\\"\u003e\u003cw:customXmlPr\u003e\u003cw:attr w:name=\\\"displayStyle\\\" w:val=\\\"false\\\"/\u003e\u003c/w:customXmlPr\u003e\u003cw:r\u003e\u003cw:t\u003e$q,r\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:customXml\u003e\u003cw:r\u003e\u003cw:t\u003e]\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eOutput:\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"ListParagraph\\\"/\u003e\u003cw:numPr\u003e\u003cw:numId w:val=\\\"1\\\"/\u003e\u003c/w:numPr\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003emin_steps:\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e The shortest distance ( integer ). Return \u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003eInf\u003c/w:t\u003e\u003c/w:r\u003e\u003cw:r\u003e\u003cw:t\u003e if the destination is unreachable.\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:rPr\u003e\u003cw:b/\u003e\u003c/w:rPr\u003e\u003cw:t\u003e\u003c/w:t\u003e\u003c/w:r\u003e\u003c/w:p\u003e\u003cw:p\u003e\u003cw:pPr\u003e\u003cw:pStyle w:val=\\\"text\\\"/\u003e\u003cw:jc w:val=\\\"left\\\"/\u003e\u003c/w:pPr\u003e\u003cw:r\u003e\u003cw:t\u003e\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\"}]}"}],"term":"tag:\"hexagonal axial coordinate\"","current_player_id":null,"fields":[{"name":"page","type":"integer","callback":null,"default":1,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"per_page","type":"integer","callback":null,"default":50,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"sort","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":null,"prepend":true},{"name":"body","type":"text","callback":null,"default":"*:*","directive":null,"facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":false},{"name":"group","type":"string","callback":null,"default":null,"directive":"group","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"difficulty_rating_bin","type":"string","callback":null,"default":null,"directive":"difficulty_rating_bin","facet":true,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"id","type":"integer","callback":null,"default":null,"directive":"id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"tag","type":"string","callback":null,"default":null,"directive":"tag","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"product","type":"string","callback":null,"default":null,"directive":"product","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_at","type":"timeframe","callback":{},"default":null,"directive":"created_at","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"profile_id","type":"integer","callback":null,"default":null,"directive":"author_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"created_by","type":"string","callback":null,"default":null,"directive":"author","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player_id","type":"integer","callback":null,"default":null,"directive":"solver_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"player","type":"string","callback":null,"default":null,"directive":"solver","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"solvers_count","type":"integer","callback":null,"default":null,"directive":"solvers_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"comments_count","type":"integer","callback":null,"default":null,"directive":"comments_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"likes_count","type":"integer","callback":null,"default":null,"directive":"likes_count","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leader_id","type":"integer","callback":null,"default":null,"directive":"leader_id","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true},{"name":"leading_solution","type":"integer","callback":null,"default":null,"directive":"leading_solution","facet":null,"facet_method":"and","operator":null,"param":"term","static":null,"prepend":true}],"filters":[{"name":"asset_type","type":"string","callback":null,"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":null,"static":"\"cody:problem\"","prepend":true},{"name":"profile_id","type":"integer","callback":{},"default":null,"directive":null,"facet":null,"facet_method":"and","operator":null,"param":"author_id","static":null,"prepend":true}],"query":{"params":{"per_page":50,"term":"tag:\"hexagonal axial coordinate\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"hexagonal axial coordinate\"","","\"","hexagonal axial coordinate","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fac45d4cda0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fac45d4cd00\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fac45d4c3a0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fac45d4d020\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fac45d4cf80\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fac45d4cee0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fac45d4ce40\u003e":"tag:\"hexagonal axial coordinate\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fac45d4ce40\u003e":"tag:\"hexagonal axial coordinate\""},"queried_facets":{}},"query_backend":{"connection":{"configuration":{"index_url":"http://index-op-v2/solr/","query_url":"http://search-op-v2/solr/","direct_access_index_urls":["http://index-op-v2/solr/"],"direct_access_query_urls":["http://search-op-v2/solr/"],"timeout":10,"vhost":"search","exchange":"search.topic","heartbeat":30,"pre_index_mode":false,"host":"rabbitmq-eks","port":5672,"username":"search","password":"J3bGPZzQ7asjJcCk","virtual_host":"search","indexer":"amqp","http_logging":"true","core":"cody"},"query_connection":{"uri":"http://search-op-v2/solr/cody/","proxy":null,"connection":{"parallel_manager":null,"headers":{"User-Agent":"Faraday v1.0.1"},"params":{},"options":{"params_encoder":"Faraday::FlatParamsEncoder","proxy":null,"bind":null,"timeout":null,"open_timeout":null,"read_timeout":null,"write_timeout":null,"boundary":null,"oauth":null,"context":null,"on_data":null},"ssl":{"verify":true,"ca_file":null,"ca_path":null,"verify_mode":null,"cert_store":null,"client_cert":null,"client_key":null,"certificate":null,"private_key":null,"verify_depth":null,"version":null,"min_version":null,"max_version":null},"default_parallel_manager":null,"builder":{"adapter":{"name":"Faraday::Adapter::NetHttp","args":[],"block":null},"handlers":[{"name":"Faraday::Response::RaiseError","args":[],"block":null}],"app":{"app":{"ssl_cert_store":{"verify_callback":null,"error":null,"error_string":null,"chain":null,"time":null},"app":{},"connection_options":{},"config_block":null}}},"url_prefix":"http://search-op-v2/solr/cody/","manual_proxy":false,"proxy":null},"update_format":"RSolr::JSON::Generator","update_path":"update","options":{"url":"http://search-op-v2/solr/cody"}}},"query":{"params":{"per_page":50,"term":"tag:\"hexagonal axial coordinate\"","current_player":null,"sort":"map(difficulty_value,0,0,999) asc"},"parser":"MathWorks::Search::Solr::QueryParser","directives":{"term":{"directives":{"tag":[["tag:\"hexagonal axial coordinate\"","","\"","hexagonal axial coordinate","\""]]}}},"facets":{"#\u003cMathWorks::Search::Field:0x00007fac45d4cda0\u003e":null,"#\u003cMathWorks::Search::Field:0x00007fac45d4cd00\u003e":null},"filters":{"#\u003cMathWorks::Search::Field:0x00007fac45d4c3a0\u003e":"\"cody:problem\""},"fields":{"#\u003cMathWorks::Search::Field:0x00007fac45d4d020\u003e":1,"#\u003cMathWorks::Search::Field:0x00007fac45d4cf80\u003e":50,"#\u003cMathWorks::Search::Field:0x00007fac45d4cee0\u003e":"map(difficulty_value,0,0,999) asc","#\u003cMathWorks::Search::Field:0x00007fac45d4ce40\u003e":"tag:\"hexagonal axial coordinate\""},"user_query":{"#\u003cMathWorks::Search::Field:0x00007fac45d4ce40\u003e":"tag:\"hexagonal axial coordinate\""},"queried_facets":{}},"options":{"fields":["id","difficulty_rating"]},"join":" "},"results":[{"id":61275,"difficulty_rating":"medium-hard"}]}}