Opis
Podając ścieżkę źródłową i ścieżkę docelową, wypisz ścieżkę względną do miejsca docelowego względem źródła.
Zasady
Dane wejściowe mogą pochodzić ze stdin lub jako argumenty programu / funkcji.
Ścieżki stylu Windows i Unix muszą być obsługiwane.
Ścieżka wyjściowa może być użyta
/
i / lub\
dla separatora ścieżek (twój wybór i połączenie obu jest OK).Możesz założyć, że ścieżka względna jest możliwa.
Korzystanie z zewnętrznych programów, funkcji wbudowanych lub funkcji bibliotecznych przeznaczonych do obliczania ścieżek względnych jest zabronione (np. Pythona
os.path.relpath
)To jest golf golfowy
Edycja: Nowa reguła z komentarzy.
Ścieżka względna musi być możliwie najkrótszą ścieżką względną.
Załóżmy, że ścieżka docelowa jest inna niż ścieżka źródłowa.
Przykład 1
# In
/usr/share/geany/colorschemes
/usr/share/vim/vim73/ftplugin
# Out
../../vim/vim73/ftplugin
Przykład 2
# In
C:\Windows\System32\drivers
C:\Windows\System32\WindowsPowerShell\v1.0
# Out
..\WindowsPowerShell\v1.0
../../vim\vim73\ftplugin
.../vim/vim73/ftplugin
?Odpowiedzi:
CJam, 46 bajtów
Wypróbuj online.
Przykłady
Jak to działa
źródło
/aa/x
z/ab/y
.Bash + coreutils, 116
Oto skrypt powłoki, aby uruchomić piłkę. Dość pewne, że będą krótsze odpowiedzi:
Wynik:
Uwaga: skrypt nie może stwierdzić, czy łańcuch
ftplugin
jest plikiem, czy katalogiem. Możesz jawnie podać katalog, dołączając go do/
jak w powyższym przykładzie.Nie obsługuje ścieżek zawierających białe znaki ani innych zabawnych postaci. Nie jestem pewien, czy jest to wymóg, czy nie. Potrzebnych byłoby tylko kilka dodatkowych cytatów.
źródło
JavaScript (E6) 104
Edytuj Dodano alert dla wyjścia
Nie golfił
Test
źródło
Rubin> = 1,9, 89
94postacieWprowadzanie za pomocą argumentów wiersza poleceń. Działa zarówno dla ścieżek w stylu UNIX, jak i Windows, w tym ścieżek z powtarzającymi się nazwami folderów:
źródło
J - 63 znak
Funkcja pobierająca starą ścieżkę po lewej i nową ścieżkę po prawej.
To rozwiązanie składa się z trzech części
post@loop&pre~
. Wyjaśnione przez wybuch:Pamiętaj, że
/
przed podziałem dodajemy wiodącą ścieżkę , abyśmy mogli obsługiwać ścieżki w stylu Windows, tworzącC:
„folder”. Powoduje to, że folder jest pusty na początku ścieżek w stylu uniksowym, ale zawsze jest usuwany przez pętlę.Zobacz to w akcji:
Można też spróbować go samodzielnie na tryj.tk .
źródło
Bash,
6966Nie opublikowałem tego, ponieważ myślałem, że ktoś musi być w stanie zrobić to znacznie lepiej. Ale najwyraźniej nie jest to takie proste.
N
markised
dopasować dwie linie razem. Pierwsze wyrażenie usuwa wspólny prefiks kończący się na/
lub\
. Drugie wyrażenie zamienia nazwy katalogów..
na w pierwszym wierszu. Na koniec łączy dwie linie z separatorem.Dzięki Hasturkun za 3 postacie.
źródło
sed
dwukrotnie, możesz to zrobić za pomocą jednego skryptu.N
. Może możesz edytować tę odpowiedź, jeśli wiesz jak.C,
119106źródło
p(char*s,char*d){for(;*s;)*s++-*d?*s-47||printf("../"):d++;puts(d);}
68 znaków bez ukośnika odwrotnegoPython 3, 120
Przykład:
źródło
exec
i operacji na łańcuchach?map(input,' ')
działać dla `(input (), input ())? (Sam nie mogę tego przetestować)Rubin - 89
Stosowanie:
źródło
/foo/bar/foo/bar
i/foo/qux/foo/bar
.JavaScript - 155
Analizuje albo format ścieżki, ale dane wyjściowe z
/
separatorem.źródło
PHP,
158151Nie golfowany:
źródło
cd
Groovy - 144 znaki
Jedno rozwiązanie:
przykładowe dane wyjściowe:
bez golfa:
źródło