I’m working on a Python(3) program in which I have to return the number of moves for a directory iteration by using the input as a list of multiple iterations denotes various actions like:
../
denotes move to the parent folder of the current folder../
remain in the same folderx/
move to the child folder named x
Actually, I have to write a Python’s function to return an integer which shows the minimum number of steps to move to the main directory from the current folder. how can I achieve that?
so, here’s an example:
Input:
5 x/ y/ ../ z/ ./
Output:
2
Explanation:
The crawler moves two folders down from the main directory to folder y
, moves back up one folder, then moves down to another folder z
, thus two moves is the right answer, one of the parent folder x
and then to the parent directory and the
first integer shows the total number moves.
And here’s what I have tried:
def minimumSteps(loggedMoves): # Write your code here moves = 0 for i in loggedMoves: print(loggedMoves[i:]) if loggedMoves[i] == './' : moves += 1 print(moves) return moves
Advertisement
Answer
You can build a stack of moves: ./ doesn’t do anything, ../ makes you go one level up, so we pop the last move, anything else adds a level.
Note that, as we don’t know the name of the directory we start from, we can only suppose that we can never go higher than it – otherwise, we couldn’t know if we come back down into it.
So, you could do:
def absolute_moves(moves): absolute = [] for move in moves: move = move.strip('/') if move == '.': continue elif move == '..': try: # we go one level up absolute.pop() except IndexError: # we tried to go higher than the start dir pass # if we suppose we were at the top level else: absolute.append(move) return absolute moves = ['x/', 'y/', '../', 'z/', './'] shortest = absolute_moves(moves) print('Shortest path: {}, length: {}'.format(shortest, len(shortest))) # Shortest path: ['x', 'z'], length: 2