Para este desafío, se le dará una ruta absoluta y una ruta "nueva" (que puede ser absoluta o relativa), y deberá devolver la ruta final.
Por ejemplo, si su directorio actual era /var/tmp/test
:
my_dir
o my_dir/
debería volver/var/tmp/test/my_dir
../../my_dir
debería volver /var/my_dir
/my_dir/./
debería volver /my_dir
../../../../../
debería volver /
Para ser más pedante:
- Un directorio es una cadena no vacía que consiste en caracteres alfanuméricos y los símbolos
-
,_
o.
- Una ruta es una lista de 0 o más directorios , separados mediante
/
. Una ruta absoluta comienza con a/
, una ruta relativa no. Los caminos pueden incluir un final/
.
Necesita "resolver" la segunda ruta, dada la primera ruta.
El proceso de resolución es:
- Prueba si la segunda ruta es relativa. Si es así, inserte los directorios de la ruta absoluta al comienzo de la segunda ruta.
- Si alguno de los directorios lo es
..
, elimínelo junto con el directorio anterior. Si es el primer directorio, simplemente elimínelo. - Si alguno de los directorios lo es
.
, elimínelo. - Salida de la ruta absoluta final. No debe generar un final
/
.
No necesita manejar entradas incorrectas. Los comandos deberían funcionar, independientemente de si los directorios pasados existen o no en su máquina. Puede suponer que todo es un directorio, incluso si tiene una extensión.
Casos de prueba
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"
"/." "" -> "/"
Este es un código de golf , ¡así que haga sus envíos lo más cortos posible en su idioma favorito!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(o algo)?