--- id: 698a1a863194f1f4e63f645f title: "Challenge 208: Trail Traversal" challengeType: 29 dashedName: challenge-208 --- # --description-- Given an array of strings representing your trail map, return a string of the moves needed to get to your goal. The given strings will contain the values: - `"C"`: Your current location - `"G"`: Your goal - `"T"`: Traversable parts of the trail - `"-"`: Untraversable parts of the map Return a string with the moves needed to follow the trail from your location to your goal where: - `"R"` is a move right - `"D"` is a move down - `"L"` is a move left - `"U"` is a move up - There will always be a single continuous trail, without any branching, from your current location to your goal. - Each trail location will have a maximum of two traversable locations touching it. For example, given: ```js [ "-CT--", "--T--", "--TT-", "---T-", "---G-" ] ``` Return `"RDDRDD"`. # --hints-- `navigate_trail(["-CT--", "--T--", "--TT-", "---T-", "---G-"])` should return `"RDDRDD"`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(navigate_trail(["-CT--", "--T--", "--TT-", "---T-", "---G-"]), "RDDRDD")`) }}) ``` `navigate_trail(["-----", "--TTG", "--T--", "--T--", "CTT--"])` should return `"RRUUURR"`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(navigate_trail(["-----", "--TTG", "--T--", "--T--", "CTT--"]), "RRUUURR")`) }}) ``` `navigate_trail(["-C----", "TT----", "T-----", "TTTTT-", "----G-"])` should return `"DLDDRRRRD"`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(navigate_trail(["-C----", "TT----", "T-----", "TTTTT-", "----G-"]), "DLDDRRRRD")`) }}) ``` `navigate_trail(["--------", "-CTTT---", "----T---", "---GT---", "--------"])` should return `"RRRDDL"`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(navigate_trail(["--------", "-CTTT---", "----T---", "---GT---", "--------"]), "RRRDDL")`) }}) ``` `navigate_trail(["TTTTTTT-", "T-----T-", "T-----T-", "TTTT--TG", "---C----"])` should return `"ULLLUUURRRRRRDDDR"`. ```js ({test: () => { runPython(` from unittest import TestCase TestCase().assertEqual(navigate_trail(["TTTTTTT-", "T-----T-", "T-----T-", "TTTT--TG", "---C----"]), "ULLLUUURRRRRRDDDR")`) }}) ``` # --seed-- ## --seed-contents-- ```py def navigate_trail(map): return map ``` # --solutions-- ```py def navigate_trail(map): rows = len(map) cols = len(map[0]) directions = [ (0, 1, "R"), (1, 0, "D"), (0, -1, "L"), (-1, 0, "U"), ] for r in range(rows): for c in range(cols): if map[r][c] == "C": row, col = r, c result = "" prev = None while map[row][col] != "G": for dr, dc, move in directions: new_row = row + dr new_col = col + dc if ( 0 <= new_row < rows and 0 <= new_col < cols and (map[new_row][new_col] == "T" or map[new_row][new_col] == "G") and (not prev or (new_row, new_col) != prev) ): result += move prev = (row, col) row, col = new_row, new_col break return result ```