Solve Robot Paths using backtracking

Failed to fetch jessie backports repository

Unattended/Unattended to?

What will be the benefits of Brexit?

Best way to store options for panels

Is a roofing delivery truck likely to crack my driveway slab?

Using parameter substitution on a Bash array

There is only s̶i̶x̶t̶y one place he can be

How does residential electricity work?

how to analyze "是其于主也至忠矣"

Do I need a multiple entry visa for a trip UK -> Sweden -> UK?

Mapping a list into a phase plot

Is it okay / does it make sense for another player to join a running game of Munchkin?

What to do with wrong results in talks?

How can I use the arrow sign in my bash prompt?

Why are on-board computers allowed to change controls without notifying the pilots?

How to avoid InDesign adding pages automatically?

Your magic is very sketchy

How do I define a right arrow with bar in LaTeX?

How to verify if g is a generator for p?

What are the ramifications of creating a homebrew world without an Astral Plane?

Curses work by shouting - How to avoid collateral damage?

Efficiently merge handle parallel feature branches in SFDX

Go Pregnant or Go Home

How will losing mobility of one hand affect my career as a programmer?



Solve Robot Paths using backtracking














1












$begingroup$


I got this problem during a mock interview, and I would like to get code review for the backtracking solution. I include 7 test cases, and my solution passes 7 out of 7 test cases. See the online code compiler here




Robot Paths



Prompt: Given a matrix of zeroes, determine how many unique paths exist from the top left corner to the bottom right corner



Input: An Array of Array of Integers (matrix)



Output: Integer



Examples:



matrix = [[0,0,0,0],
[0,0,0,0],
[0,0,0,0]]
robotPaths(matrix) = 38




matrix = [[0,0,0],
[0,0,0]]
robotPaths(matrix) = 4



# Note: From any point, you can travel in the four cardinal directions. I decided to do backtracking approach to solve this problem.
# (north, south, east, west). A path is valid as long as it travels
# from the top left corner to the bottom right corner, does not go
# off of the matrix, and does not travel back on itself


def robot_paths(matrix):
num_of_rows = len(matrix)
num_of_cols = len(matrix[0])

def traverse(row, col):
nonlocal num_of_rows
nonlocal num_of_cols
# is row and col in bounds?
if row < 0 or row >= num_of_rows or col < 0 or col >= num_of_cols:
return 0

# has row, col already been visited?
if matrix[row][col] == 1:
return 0

# is row, col the destination?
if row == num_of_rows - 1 and col == num_of_cols - 1:
return 1

# mark coordinate as visited
matrix[row][col] = 1

# initialize sum of total unique paths to end from that coordinate
s = traverse(row, col + 1) + traverse(row + 1, col) + traverse(row - 1, col) + traverse(row, col - 1)

# backtrack; mark coordinate as unvisited so it can be
matrix[row][col] = 0

return s

return traverse(0, 0)



#############################################
######## DO NOT TOUCH TEST BELOW!!! #######
#############################################

def expect(count, name, test):
if (count == None or not isinstance(count, list) or len(count) != 2):
count = [0, 0]
else:
count[1] += 1

result = 'false'
errMsg = None
try:
if test():
result = ' true'
count[0] += 1
except Exception as err:
errMsg = str(err)

print(' ' + (str(count[1]) + ') ') + result + ' : ' + name)
if errMsg != None:
print(' ' + errMsg + 'n')

def lists_equal(lst1, lst2):
if len(lst1) != len(lst2):
return False
for i in range(0, len(lst1)):
if lst1[i] != lst2[i]:
return False
return True

print('Robot Paths Tests')
test_count = [0, 0]


def test():
matrix = [[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]]
example = robot_paths(matrix)
return example == 38


expect(test_count, 'should work on first example input', test)


def test():
matrix = [[0, 0, 0],
[0, 0, 0]]
example = robot_paths(matrix)
return example == 4


expect(test_count, 'should work on second example input', test)


def test():
matrix = [[0]]
example = robot_paths(matrix)
return example == 1


expect(test_count, 'should work on single-element input', test)


def test():
matrix = [[0, 0, 0, 0, 0, 0]]
example = robot_paths(matrix)
return example == 1


expect(test_count, 'should work on single-row input', test)


def test():
matrix = [[0],
[0],
[0],
[0],
[0]]
example = robot_paths(matrix)
return example == 1


expect(test_count, 'should work on a 5 x 8 matrix input', test)


def test():
matrix = [[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]
print(" Please be patient, test 6 may take longer to run")
example = robot_paths(matrix)
return example == 7110272


print('PASSED: ' + str(test_count[0]) + ' / ' + str(test_count[1]) + 'nn')








share









$endgroup$
















    1












    $begingroup$


    I got this problem during a mock interview, and I would like to get code review for the backtracking solution. I include 7 test cases, and my solution passes 7 out of 7 test cases. See the online code compiler here




    Robot Paths



    Prompt: Given a matrix of zeroes, determine how many unique paths exist from the top left corner to the bottom right corner



    Input: An Array of Array of Integers (matrix)



    Output: Integer



    Examples:



    matrix = [[0,0,0,0],
    [0,0,0,0],
    [0,0,0,0]]
    robotPaths(matrix) = 38




    matrix = [[0,0,0],
    [0,0,0]]
    robotPaths(matrix) = 4



    # Note: From any point, you can travel in the four cardinal directions. I decided to do backtracking approach to solve this problem.
    # (north, south, east, west). A path is valid as long as it travels
    # from the top left corner to the bottom right corner, does not go
    # off of the matrix, and does not travel back on itself


    def robot_paths(matrix):
    num_of_rows = len(matrix)
    num_of_cols = len(matrix[0])

    def traverse(row, col):
    nonlocal num_of_rows
    nonlocal num_of_cols
    # is row and col in bounds?
    if row < 0 or row >= num_of_rows or col < 0 or col >= num_of_cols:
    return 0

    # has row, col already been visited?
    if matrix[row][col] == 1:
    return 0

    # is row, col the destination?
    if row == num_of_rows - 1 and col == num_of_cols - 1:
    return 1

    # mark coordinate as visited
    matrix[row][col] = 1

    # initialize sum of total unique paths to end from that coordinate
    s = traverse(row, col + 1) + traverse(row + 1, col) + traverse(row - 1, col) + traverse(row, col - 1)

    # backtrack; mark coordinate as unvisited so it can be
    matrix[row][col] = 0

    return s

    return traverse(0, 0)



    #############################################
    ######## DO NOT TOUCH TEST BELOW!!! #######
    #############################################

    def expect(count, name, test):
    if (count == None or not isinstance(count, list) or len(count) != 2):
    count = [0, 0]
    else:
    count[1] += 1

    result = 'false'
    errMsg = None
    try:
    if test():
    result = ' true'
    count[0] += 1
    except Exception as err:
    errMsg = str(err)

    print(' ' + (str(count[1]) + ') ') + result + ' : ' + name)
    if errMsg != None:
    print(' ' + errMsg + 'n')

    def lists_equal(lst1, lst2):
    if len(lst1) != len(lst2):
    return False
    for i in range(0, len(lst1)):
    if lst1[i] != lst2[i]:
    return False
    return True

    print('Robot Paths Tests')
    test_count = [0, 0]


    def test():
    matrix = [[0, 0, 0, 0],
    [0, 0, 0, 0],
    [0, 0, 0, 0]]
    example = robot_paths(matrix)
    return example == 38


    expect(test_count, 'should work on first example input', test)


    def test():
    matrix = [[0, 0, 0],
    [0, 0, 0]]
    example = robot_paths(matrix)
    return example == 4


    expect(test_count, 'should work on second example input', test)


    def test():
    matrix = [[0]]
    example = robot_paths(matrix)
    return example == 1


    expect(test_count, 'should work on single-element input', test)


    def test():
    matrix = [[0, 0, 0, 0, 0, 0]]
    example = robot_paths(matrix)
    return example == 1


    expect(test_count, 'should work on single-row input', test)


    def test():
    matrix = [[0],
    [0],
    [0],
    [0],
    [0]]
    example = robot_paths(matrix)
    return example == 1


    expect(test_count, 'should work on a 5 x 8 matrix input', test)


    def test():
    matrix = [[0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0]]
    print(" Please be patient, test 6 may take longer to run")
    example = robot_paths(matrix)
    return example == 7110272


    print('PASSED: ' + str(test_count[0]) + ' / ' + str(test_count[1]) + 'nn')








    share









    $endgroup$














      1












      1








      1





      $begingroup$


      I got this problem during a mock interview, and I would like to get code review for the backtracking solution. I include 7 test cases, and my solution passes 7 out of 7 test cases. See the online code compiler here




      Robot Paths



      Prompt: Given a matrix of zeroes, determine how many unique paths exist from the top left corner to the bottom right corner



      Input: An Array of Array of Integers (matrix)



      Output: Integer



      Examples:



      matrix = [[0,0,0,0],
      [0,0,0,0],
      [0,0,0,0]]
      robotPaths(matrix) = 38




      matrix = [[0,0,0],
      [0,0,0]]
      robotPaths(matrix) = 4



      # Note: From any point, you can travel in the four cardinal directions. I decided to do backtracking approach to solve this problem.
      # (north, south, east, west). A path is valid as long as it travels
      # from the top left corner to the bottom right corner, does not go
      # off of the matrix, and does not travel back on itself


      def robot_paths(matrix):
      num_of_rows = len(matrix)
      num_of_cols = len(matrix[0])

      def traverse(row, col):
      nonlocal num_of_rows
      nonlocal num_of_cols
      # is row and col in bounds?
      if row < 0 or row >= num_of_rows or col < 0 or col >= num_of_cols:
      return 0

      # has row, col already been visited?
      if matrix[row][col] == 1:
      return 0

      # is row, col the destination?
      if row == num_of_rows - 1 and col == num_of_cols - 1:
      return 1

      # mark coordinate as visited
      matrix[row][col] = 1

      # initialize sum of total unique paths to end from that coordinate
      s = traverse(row, col + 1) + traverse(row + 1, col) + traverse(row - 1, col) + traverse(row, col - 1)

      # backtrack; mark coordinate as unvisited so it can be
      matrix[row][col] = 0

      return s

      return traverse(0, 0)



      #############################################
      ######## DO NOT TOUCH TEST BELOW!!! #######
      #############################################

      def expect(count, name, test):
      if (count == None or not isinstance(count, list) or len(count) != 2):
      count = [0, 0]
      else:
      count[1] += 1

      result = 'false'
      errMsg = None
      try:
      if test():
      result = ' true'
      count[0] += 1
      except Exception as err:
      errMsg = str(err)

      print(' ' + (str(count[1]) + ') ') + result + ' : ' + name)
      if errMsg != None:
      print(' ' + errMsg + 'n')

      def lists_equal(lst1, lst2):
      if len(lst1) != len(lst2):
      return False
      for i in range(0, len(lst1)):
      if lst1[i] != lst2[i]:
      return False
      return True

      print('Robot Paths Tests')
      test_count = [0, 0]


      def test():
      matrix = [[0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0]]
      example = robot_paths(matrix)
      return example == 38


      expect(test_count, 'should work on first example input', test)


      def test():
      matrix = [[0, 0, 0],
      [0, 0, 0]]
      example = robot_paths(matrix)
      return example == 4


      expect(test_count, 'should work on second example input', test)


      def test():
      matrix = [[0]]
      example = robot_paths(matrix)
      return example == 1


      expect(test_count, 'should work on single-element input', test)


      def test():
      matrix = [[0, 0, 0, 0, 0, 0]]
      example = robot_paths(matrix)
      return example == 1


      expect(test_count, 'should work on single-row input', test)


      def test():
      matrix = [[0],
      [0],
      [0],
      [0],
      [0]]
      example = robot_paths(matrix)
      return example == 1


      expect(test_count, 'should work on a 5 x 8 matrix input', test)


      def test():
      matrix = [[0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0]]
      print(" Please be patient, test 6 may take longer to run")
      example = robot_paths(matrix)
      return example == 7110272


      print('PASSED: ' + str(test_count[0]) + ' / ' + str(test_count[1]) + 'nn')








      share









      $endgroup$




      I got this problem during a mock interview, and I would like to get code review for the backtracking solution. I include 7 test cases, and my solution passes 7 out of 7 test cases. See the online code compiler here




      Robot Paths



      Prompt: Given a matrix of zeroes, determine how many unique paths exist from the top left corner to the bottom right corner



      Input: An Array of Array of Integers (matrix)



      Output: Integer



      Examples:



      matrix = [[0,0,0,0],
      [0,0,0,0],
      [0,0,0,0]]
      robotPaths(matrix) = 38




      matrix = [[0,0,0],
      [0,0,0]]
      robotPaths(matrix) = 4



      # Note: From any point, you can travel in the four cardinal directions. I decided to do backtracking approach to solve this problem.
      # (north, south, east, west). A path is valid as long as it travels
      # from the top left corner to the bottom right corner, does not go
      # off of the matrix, and does not travel back on itself


      def robot_paths(matrix):
      num_of_rows = len(matrix)
      num_of_cols = len(matrix[0])

      def traverse(row, col):
      nonlocal num_of_rows
      nonlocal num_of_cols
      # is row and col in bounds?
      if row < 0 or row >= num_of_rows or col < 0 or col >= num_of_cols:
      return 0

      # has row, col already been visited?
      if matrix[row][col] == 1:
      return 0

      # is row, col the destination?
      if row == num_of_rows - 1 and col == num_of_cols - 1:
      return 1

      # mark coordinate as visited
      matrix[row][col] = 1

      # initialize sum of total unique paths to end from that coordinate
      s = traverse(row, col + 1) + traverse(row + 1, col) + traverse(row - 1, col) + traverse(row, col - 1)

      # backtrack; mark coordinate as unvisited so it can be
      matrix[row][col] = 0

      return s

      return traverse(0, 0)



      #############################################
      ######## DO NOT TOUCH TEST BELOW!!! #######
      #############################################

      def expect(count, name, test):
      if (count == None or not isinstance(count, list) or len(count) != 2):
      count = [0, 0]
      else:
      count[1] += 1

      result = 'false'
      errMsg = None
      try:
      if test():
      result = ' true'
      count[0] += 1
      except Exception as err:
      errMsg = str(err)

      print(' ' + (str(count[1]) + ') ') + result + ' : ' + name)
      if errMsg != None:
      print(' ' + errMsg + 'n')

      def lists_equal(lst1, lst2):
      if len(lst1) != len(lst2):
      return False
      for i in range(0, len(lst1)):
      if lst1[i] != lst2[i]:
      return False
      return True

      print('Robot Paths Tests')
      test_count = [0, 0]


      def test():
      matrix = [[0, 0, 0, 0],
      [0, 0, 0, 0],
      [0, 0, 0, 0]]
      example = robot_paths(matrix)
      return example == 38


      expect(test_count, 'should work on first example input', test)


      def test():
      matrix = [[0, 0, 0],
      [0, 0, 0]]
      example = robot_paths(matrix)
      return example == 4


      expect(test_count, 'should work on second example input', test)


      def test():
      matrix = [[0]]
      example = robot_paths(matrix)
      return example == 1


      expect(test_count, 'should work on single-element input', test)


      def test():
      matrix = [[0, 0, 0, 0, 0, 0]]
      example = robot_paths(matrix)
      return example == 1


      expect(test_count, 'should work on single-row input', test)


      def test():
      matrix = [[0],
      [0],
      [0],
      [0],
      [0]]
      example = robot_paths(matrix)
      return example == 1


      expect(test_count, 'should work on a 5 x 8 matrix input', test)


      def test():
      matrix = [[0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0],
      [0, 0, 0, 0, 0, 0, 0, 0]]
      print(" Please be patient, test 6 may take longer to run")
      example = robot_paths(matrix)
      return example == 7110272


      print('PASSED: ' + str(test_count[0]) + ' / ' + str(test_count[1]) + 'nn')






      python interview-questions





      share












      share










      share



      share










      asked 4 mins ago









      NinjaGNinjaG

      850632




      850632




















          0






          active

          oldest

          votes











          Your Answer





          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("mathjaxEditing", function ()
          StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
          StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
          );
          );
          , "mathjax-editing");

          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "196"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216295%2fsolve-robot-paths-using-backtracking%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















          draft saved

          draft discarded
















































          Thanks for contributing an answer to Code Review Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          Use MathJax to format equations. MathJax reference.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216295%2fsolve-robot-paths-using-backtracking%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          बाताम इन्हें भी देखें सन्दर्भ दिक्चालन सूची1°05′00″N 104°02′0″E / 1.08333°N 104.03333°E / 1.08333; 104.033331°05′00″N 104°02′0″E / 1.08333°N 104.03333°E / 1.08333; 104.03333

          Why is the 'in' operator throwing an error with a string literal instead of logging false?Why can't I use switch statement on a String?Python join: why is it string.join(list) instead of list.join(string)?Multiline String Literal in C#Why does comparing strings using either '==' or 'is' sometimes produce a different result?How to initialize an array's length in javascript?How can I print literal curly-brace characters in python string and also use .format on it?Why does ++[[]][+[]]+[+[]] return the string “10”?Why is char[] preferred over String for passwords?Why does this code using random strings print “hello world”?jQuery.inArray(), how to use it right?

          How can we generalize the fact of finite dimensional vector space to an infinte dimensional case?$k[x]$-module and cyclic module over a finite dimensional vector spaceSubspace of a finite dimensional space is finite dimensionalIf V is an infinite-dimensional vector space, and S is an infinite-dimensional subspace of V, must the dimension of V/S be finite? ExplainWhy is an infinite dimensional space so different than a finite dimensional one?base for finite dimensional vector space is not infinite dimensional vector space?Any finite-dimensional vector space is the dual space of anotherHaving Trouble Understanding Meaning Of A Finite-Dimensional Vector SpaceProve that “Every subspaces of a finite-dimensional vector space is finite-dimensional”Ring as a finite dimensional Vector space over a field KQuestion regarding basis and dimension