La description
Étant donné un chemin source et un chemin de destination, sortez le chemin relatif vers la destination par rapport à la source.
Règles
L'entrée peut provenir de stdin ou comme arguments du programme / fonction.
Les chemins de style Windows et Unix doivent être pris en charge.
Le chemin de sortie peut utiliser
/
et / ou\
pour le séparateur de chemin (votre choix et la combinaison des deux est OK).Vous pouvez supposer qu'un chemin relatif est possible.
L'utilisation de programmes externes, de fonctions intégrées ou de bibliothèque conçues pour calculer des chemins relatifs est interdite (par exemple Python
os.path.relpath
)C'est du code-golf
Modifier: nouvelle règle à partir des commentaires.
Le chemin relatif doit être le chemin relatif le plus court possible.
Supposons que le chemin de destination soit différent du chemin source.
Exemple 1
# In
/usr/share/geany/colorschemes
/usr/share/vim/vim73/ftplugin
# Out
../../vim/vim73/ftplugin
Exemple 2
# In
C:\Windows\System32\drivers
C:\Windows\System32\WindowsPowerShell\v1.0
# Out
..\WindowsPowerShell\v1.0
../../vim\vim73\ftplugin
.../vim/vim73/ftplugin
?Réponses:
CJam, 46 octets
Essayez-le en ligne.
Exemples
Comment ça fonctionne
la source
/aa/x
avec/ab/y
.Bash + coreutils, 116
Voici un script shell pour lancer la balle. Je suis presque sûr qu'il y aura des réponses plus courtes:
Production:
Notez qu'il n'y a aucun moyen pour le script de dire si la chaîne
ftplugin
est un fichier ou un répertoire. Vous pouvez explicitement fournir un répertoire en lui ajoutant un/
comme dans l'exemple ci-dessus.Ne gère pas les chemins contenant des espaces ou d'autres personnages amusants. Je ne sais pas si c'est une exigence ou non. Quelques devis supplémentaires seraient nécessaires.
la source
Javascript (E6) 104
Modifier l' alerte ajoutée pour la sortie
Non golfé
Tester
la source
Rubis> = 1,9, 89
94personnagesEntrée via des arguments de ligne de commande. Fonctionne pour les chemins de style UNIX et Windows, y compris les chemins avec des noms de dossier répétés:
la source
J - 63 car
Une fonction prenant l'ancien chemin à gauche et le nouveau chemin à droite.
Cette solution se décompose en trois parties
post@loop&pre~
. Expliqué par l'explosion:Notez que nous ajoutons un
/
début à chaque chemin avant la division, afin de gérer les chemins de style Windows en les transformantC:
en "dossier". Il en résulte un dossier vide au début des chemins de style Unix, mais qui est toujours supprimé par la boucle.Voyez-le en action:
Vous pouvez également essayer vous - même à tryj.tk .
la source
Bash,
6966Je n'ai pas posté celui-ci parce que je pensais que quelqu'un devait pouvoir le faire beaucoup mieux. Mais apparemment, ce n'est pas si simple.
N
faitsed
correspondre deux lignes ensemble. La première expression supprime le préfixe commun se terminant par/
ou\
. La deuxième expression remplace les noms de répertoire par..
dans la première ligne. Enfin, il concatène les deux lignes avec le séparateur.Merci à Hasturkun pour 3 personnages.
la source
sed
deux fois, vous pouvez le faire avec un seul script.N
. Vous pouvez peut-être modifier cette réponse si vous savez comment.C,
119106la source
p(char*s,char*d){for(;*s;)*s++-*d?*s-47||printf("../"):d++;puts(d);}
68 caractères sans barre oblique inversePython 3, 120
Exemple:
la source
exec
et les opérations de chaîne?map(input,' ')
fonctionner pour `(entrée (), entrée ())? (Je ne peux pas le tester moi-même)Rubis - 89
Usage:
la source
/foo/bar/foo/bar
et/foo/qux/foo/bar
.JavaScript - 155
Analyse l'un ou l'autre des formats de chemin, mais génère un
/
séparateur.la source
PHP,
158151Non golfé:
la source
cd
former les uns aux autres :)Groovy - 144 caractères
Une solution:
exemple de sortie:
non golfé:
la source