Für diese Herausforderung erhalten Sie einen absoluten Pfad und einen "neuen" Pfad (der absolut oder relativ sein kann), und Sie müssen den endgültigen Pfad zurückgeben.
Zum Beispiel, wenn Ihr aktuelles Verzeichnis war /var/tmp/test
:
my_dir
oder my_dir/
sollte zurückkehren/var/tmp/test/my_dir
../../my_dir
sollte zurückkehren /var/my_dir
/my_dir/./
sollte zurückkehren /my_dir
../../../../../
sollte zurückkehren /
Um pedantischer zu sein:
- Ein Verzeichnis ist eine nicht leere Zeichenfolge , bestehend aus alphanumerischen Zeichen und die Symbole
-
,_
, oder.
- Ein Pfad ist eine Liste von 0 oder mehr Verzeichnissen , die mit getrennt werden
/
. Ein absoluter Pfad beginnt mit a/
, ein relativer Pfad nicht. Pfade können ein Ende enthalten/
.
Sie müssen den zweiten Pfad unter Angabe des ersten Pfads "auflösen".
Der Lösungsprozess ist:
- Testen Sie, ob der zweite Pfad relativ ist. Wenn ja, fügen Sie die Verzeichnisse des absoluten Pfads an den Anfang des zweiten Pfads ein.
- Wenn eines der Verzeichnisse vorhanden ist
..
, entfernen Sie es und das vorhergehende Verzeichnis. Wenn es das erste Verzeichnis ist, entfernen Sie es einfach. - Wenn eines der Verzeichnisse vorhanden ist
.
, entfernen Sie es. - Geben Sie den endgültigen absoluten Pfad aus. Sie sollten kein Ende ausgeben
/
.
Sie müssen nicht mit falschen Eingaben umgehen. Die Befehle sollten funktionieren, unabhängig davon, ob die übergebenen Verzeichnisse tatsächlich auf Ihrem Computer vorhanden sind. Sie können davon ausgehen, dass alles ein Verzeichnis ist, auch wenn es eine Erweiterung hat.
Testfälle
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"
"/." "" -> "/"
Dies ist ein Code-Golf , also machen Sie Ihre Einsendungen so kurz wie möglich in Ihrer Lieblingssprache!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(oder so)?