-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtask2.py
67 lines (51 loc) · 2.3 KB
/
task2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
Дана строка, которая является абсолютным путем к файлу или директории в системе Unix.
Нужно упростить эту строку до каноничного пути.
Каноничный путь - это тот путь, который будет максимально простым и строгим, а именно:
1. Путь начинается с единичного слеша /
2. Любые две директории разделяются одиночным слешем
3. Путь не может оканчиваться на /
4. Путь может содержать только истинные директории к нужному файлу (то есть в пути не может быть '.' или '..')
На вход подается путь к файлу или директории в системе Unix.
На выходе ожидается каноничный путь.
Пример
абсолютный путь: /home/abc/../abc/file.txt
каноничный путь: /home/abc/file.txt
Программа должна возвращать упрощенный каноничный путь до файла или директории
Sample Input:
/../
Sample Output:
/
"""
import sys
class MyTrip:
"""Класс для помощи"""
def __init__(self):
self._root_list = []
def add(self, value: str) -> None:
"""Добавление данных"""
if value.startswith(".."):
if len(self._root_list) != 0:
self._root_list.pop(-1)
return
if value.startswith(".") or value.startswith("\\"):
return
self._root_list.append(value)
@property
def root_list(self):
if len(self._root_list) == 0:
return "/"
return "/".join(self._root_list)
def main():
input_str = sys.stdin.read()
# Фильтруем на пустые значения
data_list = [e for e in input_str.split("/") if e != ""]
# Создаем экзампляр класса
trip = MyTrip()
# Добавляем директории
for path in data_list:
trip.add(path)
# Выводим результат
print(trip.root_list)
if __name__ == "__main__":
main()