Pour ce défi, vous recevrez un chemin absolu et un "nouveau" chemin (qui peut être absolu ou relatif), et vous devrez retourner le chemin final.
Par exemple, si votre répertoire actuel était /var/tmp/test
:
my_dir
ou my_dir/
devrait revenir/var/tmp/test/my_dir
../../my_dir
devrait revenir /var/my_dir
/my_dir/./
devrait revenir /my_dir
../../../../../
devrait revenir /
Pour être plus pédant:
- Un répertoire est une chaîne non vide constitué de caractères alphanumériques et des symboles
-
,_
ou.
- Un chemin est une liste de 0 ou plusieurs répertoires , séparés par
/
. Un chemin absolu commence par a/
, pas un chemin relatif. Les chemins peuvent inclure une fin/
.
Vous devez "résoudre" le deuxième chemin, étant donné le premier chemin.
Le processus de résolution est le suivant:
- Testez si le deuxième chemin est relatif. Si tel est le cas, insérez les répertoires du chemin absolu au début du deuxième chemin.
- Si l'un des répertoires l'est
..
, supprimez-le ainsi que le répertoire précédent. S'il s'agit du premier répertoire, supprimez-le simplement. - Si l'un des répertoires l'est
.
, supprimez-le. - Sortez le chemin absolu final. Vous ne devez pas produire de fin
/
.
Vous n'avez pas besoin de gérer une entrée incorrecte. Les commandes devraient fonctionner, que les répertoires transmis existent ou non sur votre machine. Vous pouvez supposer que tout est un répertoire, même s'il a une extension.
Cas de 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"
"/." "" -> "/"
Ceci est un code-golf , alors faites vos soumissions aussi courtes que possible dans votre langue préférée!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(ou quelque chose)?