Manchmal kann ein langer absoluter Pfad, z. B. in einem Befehlszeilenparameter zu einem Linux-Tool, unter Verwendung des aktuellen Arbeitsverzeichnisses als Referenz verkürzt werden:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
In dieser Herausforderung sollten Sie eine Funktion oder ein Programm erstellen, das zwei Parameter erhält:
- Absoluter Pfad im Linux-Format (beginnt mit
/
) - Aktuelles Verzeichnis im selben Format
Die Ausgabe ist die kürzere der folgenden:
- Eingang 1 unverändert
- Relativer Pfad, der sich auf dieselbe Datei / dasselbe Verzeichnis bezieht wie der absolute Pfad
Feine punkte:
- Wenn Ihr Betriebssystem mit Linux kompatibel ist, können Sie das aktuelle Verzeichnis des Systems verwenden, anstatt es als Eingabe zu empfangen
- Sie können davon ausgehen, dass die Eingaben nur alphanumerische Zeichen (und Pfadtrennzeichen) enthalten.
- Sie können davon ausgehen, dass der absolute Eingabepfad
/
am Ende kein Pfadtrennzeichen enthält - Sie können davon ausgehen, dass das aktuelle Eingabeverzeichnis
/
am Ende ein Pfadtrennzeichen hat - Sie können nicht davon ausgehen, dass der absolute Pfad auf eine vorhandene Datei verweist oder dass ein Teil davon ein zugängliches Verzeichnis ist. Das aktuelle Verzeichnis kann jedoch als gültig angenommen werden
- Sie können davon ausgehen, dass es in der Nähe beider Pfade keine Symlinks gibt - da ich keine spezielle Art des Umgangs mit Symlinks benötigen möchte
- Es ist nicht erforderlich, den Fall zu unterstützen, in dem eine der Eingaben das Stammverzeichnis ist
- "Das aktuelle Verzeichnis" sollte ausgegeben werden als
.
(eine leere Zeichenkette ist ungültig)
Testfälle (Eingabe1, Eingabe2, Ausgabe):
/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
.
code-golf
string
file-system
anatolyg
quelle
quelle
/
am Ende ein Pfadtrennzeichen hat ". In Ihren Beispielen ist dies jedoch nicht der Fall./home/test /home/user/mydir/myfile /home/test
und/a/b /a/b/d/e /a/b
Antworten:
Julia 0,5 , 32 Bytes
Dies verwendet das aktuelle Arbeitsverzeichnis als Basis und kann derzeit nicht auf TIO getestet werden.
Beispiellauf
Warnung: Dies ändert Ihr Dateisystem.
Alternative Version, 35 Bytes (dyadisch)
Hierbei wird das Basisverzeichnis als Eingabe verwendet, sodass es getestet werden kann, ohne das Dateisystem zu ändern.
Probieren Sie es online!
quelle
Base.-
Fehler , sofern nicht ausdrücklich importiert, nicht wahr?-
vor der Neudefinition verwenden. In 0.4 wird eine Warnung ausgegeben, ob Sie diese vor der Neudefinition verwenden oder nicht.JavaScript (ES6),
107106 BytesÜbernimmt den absoluten Pfad
a
und den aktuellen Pfadc
in der aktuellen Syntax(a)(c)
.Testfälle
Code-Snippet anzeigen
quelle
[a.length]
! Darf ich es ausleihen, um die Antwort von Node.j zu verbessern?Retina ,
858382 Bytes1 Byte gespart dank @MartinEnder
Probieren Sie es online!
quelle
ES6 (Node.js REPL),
56,54,4645 Bytes[f.length]
Trick von @ Arnauld's Antwort ausgeliehen , -6 BytesGolf gespielt
Prüfung
quelle
Python 2,
135144 BytesProbieren Sie es online!
Ein bisschen lang, aber ich wollte eine Lösung ohne eingebaute Pfadfunktionen machen.
Bearbeiten: 9 Bytes hinzugefügt, um den von Nathan Merrill bereitgestellten Testfall zu berücksichtigen
quelle
Zsh + realpath, 58 Bytes
Probieren Sie es online!
Bash-Version, 62 Bytes
Probieren Sie es online!
quelle
Python 3 - 53 Bytes
Verwenden von
os.path
:Volles Programm (61 Bytes):
quelle
PHP, 204 Bytes
Testfälle
Erweitert
Wenn
../../
stattdessen eine Ausgabeof ../..
zulässig ist, kann diese auf 175 Byte gekürzt werdenquelle
C # - 66 Bytes
Mit Hilfe eines .NET builtin und zwingt ein gültiger Pfad zu sein:
Wo
f
,t
und ausgegeben werdenstring
.Probieren Sie es online!
quelle