solve? -> Ways to exit maze 1. Have we reached the end? -> If yes, we found a route! -> If no, try more paths (2) 2. Go to next intersection / try next available routes
solve? -> Ways to exit maze 1. Have we reached the end? -> If yes, we found a route! -> If no, try more paths (2) 2. Go to next intersection / try next available routes 3. For each unvisited direction, try to solve again
solve? -> Ways to exit maze 1. Have we reached the end? -> If yes, we found a route! -> If no, try more paths (2) 2. Go to next intersection / try next available routes 3. For each unvisited direction, try to solve again 4. If dead end, go back to last intersection
2. GetCandidates - get all the possible potential solutions (local solutions) 3. IsSolution - is this candidate a solution? 4. Backtrack - Undo any state that was caused with local guesses Common Backtracking Algorithm
word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] “see” -> true “xyz” -> false Word Search
word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] “see” -> true “xyz” -> false Word Search What are our constraints?
word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] “see” -> true “xyz” -> false Word Search constraints
word exists in the grid. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] Word Search isSolution(prefix, word) // prefix is our built up solution // return prefix == word getCandidates(position, visited, board, letter) // get unvisited adjacent positions that match letter backup(prefix, position, visited) // remove last letter from previous // remove position from visited search(board, word, prefix, position, visited) // return true if isSolution(prefix, word) // for each getCandidates // add letter(position) to prefix // add position to visited // search from next position // if not found backup
word exists in the grid. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] Word Search isSolution(prefix, word) // prefix is our built up solution // return prefix == word getCandidates(position, visited, board, letter) // get unvisited adjacent positions that match letter backup(prefix, position, visited) // remove last letter from previous // remove position from visited search(board, word, prefix, position, visited) // return true if isSolution(prefix, word) // for each getCandidates // add letter(position) to prefix // add position to visited // search from next position // if not found backup
word exists in the grid. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] Word Search isSolution(prefix, word) // prefix is our built up solution // return prefix == word getCandidates(position, visited, board, letter) // get unvisited adjacent positions that match letter backup(prefix, position, visited) // remove last letter from previous // remove position from visited search(board, word, prefix, position, visited) // return true if isSolution(prefix, word) // for each getCandidates // add letter(position) to prefix // add position to visited // search from next position // if not found backup
word exists in the grid. board = [ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E'] ] Word Search isSolution(prefix, word) // prefix is our built up solution // return prefix == word getCandidates(position, visited, board, letter) // get unvisited adjacent positions that match letter backup(prefix, position, visited) // remove last letter from previous // remove position from visited search(board, word, prefix, position, visited) // return true if isSolution(prefix, word) // for each getCandidates // add letter(position) to prefix // add position to visited // search from next position // if not found backup
half does the other problem - 30 minutes, everybody tries to do their own problem - 10 minutes - group 1 explains their problem - 10 minutes - group 2 explains their problem - Last 10 minutes - try implementing the problem we just debugged together!
their feedback right after they talk to you (hire / no hire / not sure) - Everybody gets together to talk as a group - Was the person’s coding skills up to par? (did they understand time / space complexity, do they know when to use different data structures, etc)
their feedback right after they talk to you (hire / no hire / not sure) - Everybody gets together to talk as a group - Was the person’s coding skills up to par? (did they understand time / space complexity, do they know when to use different data structures, etc) - Was the person able to communicate well?
their feedback right after they talk to you (hire / no hire / not sure) - Everybody gets together to talk as a group - Was the person’s coding skills up to par? (did they understand time / space complexity, do they know when to use different data structures, etc) - Was the person able to communicate well? - Was the person respectful of everybody?
their feedback right after they talk to you (hire / no hire / not sure) - Everybody gets together to talk as a group - Was the person’s coding skills up to par? (did they understand time / space complexity, do they know when to use different data structures, etc) - Was the person able to communicate well? - Was the person respectful of everybody? - Is this someone we would enjoy working with?
their feedback right after they talk to you (hire / no hire / not sure) - Everybody gets together to talk as a group - Was the person’s coding skills up to par? (did they understand time / space complexity, do they know when to use different data structures, etc) - Was the person able to communicate well? - Was the person respectful of everybody? - Is this someone we would enjoy working with? - Does the person’s background match what we need in the team?
skills - is your code easy to understand? - did you handle edge cases? - do you know when to use data structures and built in methods? - were you able to solve your own bugs? - Design - Communication - Speed
Design - were you able to gather enough requirements to solve the problem? - were you able to discuss trade-offs with different approaches? - were you able to verbally explain a solution before jumping into implementation? - did you use the appropriate data structures / algorithms? - Communication - Speed
- Design - Communication - Speed - were you able to finish the question within the expected time? (often times a question has followups) - did you need hints to guide you to the solution?