Parfois, un long chemin absolu, par exemple un paramètre de ligne de commande vers un outil Linux, peut être raccourci, en utilisant le répertoire de travail actuel comme référence:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
Dans ce défi, vous devez créer une fonction ou un programme qui reçoit deux paramètres:
- Chemin absolu, en utilisant le format linux (commence par
/
) - Répertoire courant, utilisant le même format
La sortie est la plus courte des valeurs suivantes:
- Entrée 1 inchangée
- Chemin relatif qui fait référence au même fichier / répertoire que le chemin absolu
Points fins:
- Si votre système d'exploitation est compatible avec Linux, vous pouvez utiliser le répertoire actuel du système au lieu de le recevoir en entrée
- Vous pouvez supposer que les entrées contiennent uniquement des caractères alphanumériques (et des séparateurs de chemin)
- Vous pouvez supposer que le chemin absolu d'entrée n'a pas de séparateur de chemin
/
à la fin - Vous pouvez supposer que le répertoire courant d'entrée a un séparateur de chemin
/
à la fin - Vous ne pouvez pas supposer que le chemin absolu fait référence à un fichier existant, ou que n'importe quelle partie de celui-ci est un répertoire accessible; cependant, le répertoire courant peut être considéré comme valide
- Vous pouvez supposer qu'il n'y a aucun lien symbolique n'importe où près de l'un ou l'autre chemin - parce que je ne veux pas avoir besoin d'une manière spéciale de traiter les liens symboliques
- Pas besoin de prendre en charge le cas où l'une des entrées est le répertoire racine
- "Le répertoire courant" doit être affiché en tant que
.
(une chaîne vide n'est pas valide)
Cas de test (entrée1, entrée2, sortie):
/home/user/mydir/myfile
/home/user
mydir/myfile
/var/users/admin/secret/passwd
/var/users/joe/hack
../../admin/secret/passwd
/home/user/myfile
/tmp/someplace
/home/user/myfile
/dir1/dir2
/dir1/dir2/dir3/dir4
../..
/dir1/dir2
/dir1/dir2
.
/home/test /home/user/mydir/myfile /home/test
et/a/b /a/b/d/e /a/b
/
à la fin". Cependant, dans vos exemples, ce n'est pas le cas.