Created
December 15, 2020 03:59
-
-
Save willy-r/eb45543aeff75f60fbde6657ede4a8fe to your computer and use it in GitHub Desktop.
Given a list of folders in a filesystem and the name of a folder to remove, return the new list of folders after removal.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def remove_folder(folders: list[str], folder_to_rm: str) -> list[str]: | |
if not folders: | |
return folders | |
if not isinstance(folder_to_rm, str): | |
raise ValueError('Enter a valid folder name') | |
new_folders = [] | |
for i, folder in enumerate(folders): | |
folder_names = folder.split('/')[1:] | |
if folder_names[0] == folder_to_rm: | |
del folders[i] | |
continue | |
for i, folder_name in enumerate(folder_names): | |
if folder_name == folder_to_rm: | |
folder = ''.join([f'/{f}' for f in folder_names[:i]]) | |
break | |
if folder not in new_folders: | |
new_folders.append(folder) | |
return new_folders | |
def test_examples(): | |
assert remove_folder( | |
['/a', '/a/b', '/c/d', '/c/d/e', '/c/f', '/c/f/g'], 'c' | |
) == ['/a', '/a/b'] | |
assert remove_folder( | |
['/a', '/a/b', '/c/d', '/c/d/e', '/c/f', '/c/f/g'], 'd' | |
) == ['/a', '/a/b', '/c', '/c/f', '/c/f/g'] | |
def test_folder_in_the_end(): | |
assert remove_folder(['/a/b/c', '/c/d', '/d/c'], 'd') == ['/a/b/c', '/c'] | |
def test_folder_not_found(): | |
assert remove_folder(['/a/b/c', '/d/e/f'], 'g') == ['/a/b/c', '/d/e/f'] | |
if __name__ == '__main__': | |
test_examples() | |
test_folder_in_the_end() | |
test_folder_not_found() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment