Za to wyzwanie otrzymasz ścieżkę bezwzględną i „nową” ścieżkę (która może być absolutna lub względna) i musisz zwrócić ostatnią ścieżkę.
Na przykład jeśli bieżący katalog to /var/tmp/test
:
my_dir
lub my_dir/
powinien wrócić/var/tmp/test/my_dir
../../my_dir
powinien wrócić /var/my_dir
/my_dir/./
powinien wrócić /my_dir
../../../../../
powinien wrócić /
Aby być bardziej pedantycznym:
- Katalog jest niepusty łańcuch składający się ze znaków alfanumerycznych i symboli
-
,_
lub.
- Ścieżka to lista 0 lub więcej katalogów oddzielonych za pomocą
/
. Ścieżka bezwzględna zaczyna się od/
, ścieżka względna nie. Ścieżki mogą zawierać zakończenie/
.
Musisz „rozwiązać” drugą ścieżkę, biorąc pod uwagę pierwszą ścieżkę.
Proces rozstrzygania jest:
- Sprawdź, czy druga ścieżka jest względna. Jeśli tak, wstaw katalogi ścieżki bezwzględnej na początek drugiej ścieżki.
- Jeśli którykolwiek z katalogów jest
..
, usuń go i poprzedni katalog. Jeśli jest to pierwszy katalog, po prostu go usuń. - Jeśli którykolwiek z katalogów jest
.
, usuń go. - Wyjście końcowej ścieżki bezwzględnej. Nie powinieneś wypisywać zakończenia
/
.
Nie musisz obsługiwać nieprawidłowych danych wejściowych. Polecenia powinny działać, niezależnie od tego, czy przekazane katalogi faktycznie istnieją na twoim komputerze. Możesz założyć, że wszystko jest katalogiem, nawet jeśli ma rozszerzenie.
Przypadki testowe
Absolute New Output
"/a/b/c" "d" -> "/a/b/c/d"
"/a/b/c/" "d" -> "/a/b/c/d"
"/a/b/c/" "d/" -> "/a/b/c/d"
"/a/b/c" "/d" -> "/d"
"/a/b/c" "/d/" -> "/d"
"/../a/b/c/" "d" -> "/a/b/c/d"
"/a/../b/c/" "d" -> "/b/c/d"
"/a/b/../c" "d" -> "/a/c/d"
"/a/b/c/.." "d" -> "/a/b/d"
"/a/b/c/" ".." -> "/a/b"
"/a/b/c" "../d" -> "/a/b/d"
"/a/b/c" "/../d" -> "/d"
"/a/b/c" "" -> "/a/b/c"
"/a/b/c" "." -> "/a/b/c"
"/a/b/c" "./d" -> "/a/b/c/d"
"/a/b/c" "/./d" -> "/d"
"/a/b/c" "d.txt" -> "/a/b/c/d.txt"
"/a/b/c" "d." -> "/a/b/c/d."
"/a/b/c" ".txt" -> "/a/b/c/.txt"
"/a/b/c" ".txt/d" -> "/a/b/c/.txt/d"
"/a/b/." "./././." -> "/a/b"
"/direc" "tory" -> "/direc/tory"
"/a-_.b/" "__._-." -> "/a-_.b/__._-."
"/a/b" "../.." -> "/"
"/a/b" "../../.."-> "/"
"/a" "../../.."-> "/"
"/" "" -> "/"
"/" "a" -> "/a"
"/.." "a" -> "/a"
"/." "" -> "/"
To jest golf golfowy , dlatego postaraj się , aby Twoje zgłoszenia były jak najkrótsze w swoim ulubionym języku!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(lub coś w tym rodzaju)?