Czasami długą ścieżkę bezwzględną, np. Parametr wiersza polecenia do narzędzia linux, można skrócić, używając bieżącego katalogu roboczego jako odniesienia:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
W tym wyzwaniu powinieneś stworzyć funkcję lub program, który otrzyma dwa parametry:
- Ścieżka bezwzględna, w formacie linux (zaczyna się od
/
) - Aktualny katalog, w tym samym formacie
Dane wyjściowe są krótsze z następujących:
- Wejście 1 bez zmian
- Ścieżka względna, która odnosi się do tego samego pliku / katalogu co ścieżka bezwzględna
Drobne punkty:
- Jeśli twój system operacyjny jest zgodny z Linuksem, możesz użyć bieżącego katalogu systemu zamiast odbierać go jako dane wejściowe
- Możesz założyć, że dane wejściowe zawierają tylko znaki alfanumeryczne (i separatory ścieżek)
- Możesz założyć, że wejściowa ścieżka bezwzględna nie ma separatora ścieżek
/
na końcu - Możesz założyć, że wejściowy katalog bieżący ma separator ścieżek
/
na końcu - Nie można założyć, że ścieżka bezwzględna odnosi się do istniejącego pliku lub że jakakolwiek jego część jest katalogiem dostępnym; jednak bieżący katalog można uznać za prawidłowy
- Możesz założyć, że nie ma żadnych dowiązań symbolicznych w pobliżu żadnej ze ścieżek - ponieważ nie chcę wymagać żadnego specjalnego sposobu radzenia sobie z dowiązaniami symbolicznymi
- Nie ma potrzeby obsługi przypadku, w którym jedno z danych wejściowych jest katalogiem głównym
- „Bieżący katalog” powinien być wyprowadzony jako
.
(pusty ciąg jest niepoprawny)
Przypadki testowe (wejście 1, wejście 2, wyjście):
/home/user/mydir/myfile
/home/user
mydir/myfile
/var/users/admin/secret/passwd
/var/users/joe/hack
../../admin/secret/passwd
/home/user/myfile
/tmp/someplace
/home/user/myfile
/dir1/dir2
/dir1/dir2/dir3/dir4
../..
/dir1/dir2
/dir1/dir2
.
/home/test /home/user/mydir/myfile /home/test
oraz/a/b /a/b/d/e /a/b
/
na końcu”. Jednak w twoich przykładach tak nie jest.