Per questa sfida, ti verrà assegnato un percorso assoluto e un "nuovo" percorso (che può essere assoluto o relativo) e dovrai restituire il percorso finale.
Ad esempio, se la directory corrente era /var/tmp/test
:
my_dir
o my_dir/
dovrebbe tornare/var/tmp/test/my_dir
../../my_dir
dovrebbe tornare /var/my_dir
/my_dir/./
dovrebbe tornare /my_dir
../../../../../
dovrebbe tornare /
Per essere più pedanti:
- Una directory è una stringa non vuota costituite da caratteri alfanumerici e simboli
-
,_
o.
- Un percorso è un elenco di 0 o più directory , separate usando
/
. Un percorso assoluto inizia con a/
, un percorso relativo no. I percorsi possono includere un finale/
.
Devi "risolvere" il secondo percorso, dato il primo percorso.
Il processo di risoluzione è:
- Verifica se il secondo percorso è relativo. In tal caso, inserire le directory del percorso assoluto all'inizio del secondo percorso.
- Se è presente una delle directory
..
, rimuoverla e la directory precedente. Se è la prima directory, rimuovila semplicemente. - Se è presente una delle directory
.
, rimuoverla. - Emette il percorso assoluto finale. Non dovresti generare un finale
/
.
Non è necessario gestire input errati. I comandi dovrebbero funzionare, indipendentemente dal fatto che le directory passate esistano o meno sul tuo computer. Puoi presumere che tutto sia una directory, anche se ha un'estensione.
Casi test
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"
"/." "" -> "/"
Questo è un codice-golf , quindi rendi i tuoi invii il più brevi possibile nella tua lingua preferita!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(o qualcosa del genere)?