Beschreibung
Geben Sie unter Angabe eines Quellpfads und eines Zielpfads den relativen Pfad zum Ziel in Bezug auf die Quelle aus.
Regeln
Die Eingabe kann von stdin oder als Argument für das Programm / die Funktion erfolgen.
Sowohl Windows- als auch Unix-Pfade müssen unterstützt werden.
Der Ausgabepfad kann
/
und / oder\
als Pfadtrennzeichen verwendet werden (Ihre Wahl und Kombination aus beiden ist in Ordnung).Sie können davon ausgehen, dass ein relativer Pfad möglich ist.
Die Verwendung externer Programme, eingebauter Funktionen oder Bibliotheksfunktionen zur Berechnung relativer Pfade ist untersagt (z. B. Pythons
os.path.relpath
).Das ist Code-Golf
Bearbeiten: Neue Regel aus Kommentaren.
Der relative Pfad muss der kürzest mögliche relative Pfad sein.
Angenommen, der Zielpfad unterscheidet sich vom Quellpfad.
Beispiel 1
# In
/usr/share/geany/colorschemes
/usr/share/vim/vim73/ftplugin
# Out
../../vim/vim73/ftplugin
Beispiel 2
# In
C:\Windows\System32\drivers
C:\Windows\System32\WindowsPowerShell\v1.0
# Out
..\WindowsPowerShell\v1.0
../../vim\vim73\ftplugin
.../vim/vim73/ftplugin
?Antworten:
CJam, 46 Bytes
Probieren Sie es online aus.
Beispiele
Wie es funktioniert
quelle
/aa/x
mit/ab/y
.Bash + Coreutils, 116
Hier ist ein Shell-Skript, um den Ball ins Rollen zu bringen. Ich bin mir ziemlich sicher, dass es kürzere Antworten geben wird:
Ausgabe:
Beachten Sie, dass das Skript nicht erkennen kann, ob es sich um eine Zeichenfolge handelt
ftplugin
eine Datei oder ein Verzeichnis ist. Sie können ein Verzeichnis explizit bereitstellen, indem Sie es/
wie im obigen Beispiel mit einem anhängen .Behandelt keine Pfade, die Leerzeichen oder andere lustige Zeichen enthalten. Ich bin mir nicht sicher, ob dies eine Anforderung ist oder nicht. Es wären nur ein paar zusätzliche Anführungszeichen erforderlich.
quelle
Javascript (E6) 104
Bearbeiten Hinzugefügt Warnung für die Ausgabe
Ungolfed
Prüfung
quelle
Ruby> = 1,9, 89
94ZeichenEingabe über Kommandozeilenargumente. Funktioniert für Pfade im UNIX- und Windows-Stil, einschließlich Pfade mit wiederholten Ordnernamen:
quelle
J - 63 Zeichen
Eine Funktion, die links den alten und rechts den neuen Pfad einnimmt.
Diese Lösung besteht aus drei Teilen
post@loop&pre~
. Erklärt durch Explosion:Beachten Sie, dass wir
/
vor dem Aufteilen jedem Pfad einen Verweis hinzufügen , damit wir Windows-artige Pfade verarbeiten, indem wir sieC:
in einen "Ordner" umwandeln. Dies führt zu einem leeren Ordner am Anfang von Pfaden im Unix-Stil, der jedoch immer von der Schleife entfernt wird.Sehen Sie es in Aktion:
Sie können es auch selbst bei tryj.tk versuchen .
quelle
Bash,
6966Ich habe diesen Beitrag nicht gepostet, weil ich dachte, jemand muss es viel besser können. Aber anscheinend ist es nicht so einfach.
N
Lässtsed
zwei Zeilen zusammenpassen. Der erste Ausdruck entfernt das gemeinsame Präfix, das mit/
oder endet\
. Der zweite Ausdruck ersetzt die Verzeichnisnamen..
in der ersten Zeile durch. Schließlich werden die beiden Zeilen mit dem Trennzeichen verkettet.Danke an Hasturkun für 3 Charaktere.
quelle
sed
zweimal ausgeführt werden, sondern können dies mit einem einzigen Skript tun.N
. Vielleicht können Sie diese Antwort bearbeiten, wenn Sie wissen, wie.C
119106quelle
p(char*s,char*d){for(;*s;)*s++-*d?*s-47||printf("../"):d++;puts(d);}
68 Zeichen ohne BackslashPython 3, 120
Beispiel:
quelle
exec
und String-Operationen durchzuführen?map(input,' ')
für `(input (), input ()) funktionieren? (Ich kann es nicht selbst testen)Rubin - 89
Verwendung:
quelle
/foo/bar/foo/bar
und/foo/qux/foo/bar
.JavaScript - 155
Analysiert beide Pfadformate, gibt jedoch mit
/
Trennzeichen aus.quelle
PHP,
158151Ungolfed:
quelle
cd
bilden Sie eine zu anderen :)Groovy - 144 Zeichen
Eine Lösung:
Beispielausgabe:
ungolfed:
quelle