Czasami długą ścieżkę bezwzględną, np. Parametr wiersza polecenia do narzędzia linux, można skrócić, używając bieżącego katalogu roboczego jako odniesienia:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
W tym wyzwaniu powinieneś stworzyć funkcję lub program, który otrzyma dwa parametry:
- Ścieżka bezwzględna, w formacie linux (zaczyna się od
/
) - Aktualny katalog, w tym samym formacie
Dane wyjściowe są krótsze z następujących:
- Wejście 1 bez zmian
- Ścieżka względna, która odnosi się do tego samego pliku / katalogu co ścieżka bezwzględna
Drobne punkty:
- Jeśli twój system operacyjny jest zgodny z Linuksem, możesz użyć bieżącego katalogu systemu zamiast odbierać go jako dane wejściowe
- Możesz założyć, że dane wejściowe zawierają tylko znaki alfanumeryczne (i separatory ścieżek)
- Możesz założyć, że wejściowa ścieżka bezwzględna nie ma separatora ścieżek
/
na końcu - Możesz założyć, że wejściowy katalog bieżący ma separator ścieżek
/
na końcu - Nie można założyć, że ścieżka bezwzględna odnosi się do istniejącego pliku lub że jakakolwiek jego część jest katalogiem dostępnym; jednak bieżący katalog można uznać za prawidłowy
- Możesz założyć, że nie ma żadnych dowiązań symbolicznych w pobliżu żadnej ze ścieżek - ponieważ nie chcę wymagać żadnego specjalnego sposobu radzenia sobie z dowiązaniami symbolicznymi
- Nie ma potrzeby obsługi przypadku, w którym jedno z danych wejściowych jest katalogiem głównym
- „Bieżący katalog” powinien być wyprowadzony jako
.
(pusty ciąg jest niepoprawny)
Przypadki testowe (wejście 1, wejście 2, wyjście):
/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
anatolig
źródło
źródło
/
na końcu”. Jednak w twoich przykładach tak nie jest./home/test /home/user/mydir/myfile /home/test
oraz/a/b /a/b/d/e /a/b
Odpowiedzi:
Julia 0,5 , 32 bajty
Wykorzystuje bieżący katalog roboczy jako bazę i obecnie nie można go przetestować na TIO.
Przykładowy przebieg
Ostrzeżenie: spowoduje to zmianę systemu plików.
Wersja alternatywna, 35 bajtów (dyadyczna)
To pobiera katalog podstawowy jako dane wejściowe, dzięki czemu można go przetestować bez modyfikowania systemu plików.
Wypróbuj online!
źródło
Base.-
błędów, chyba że jest to wyraźnie zaimportowane, prawda?-
przed ponownym zdefiniowaniem. W wersji 0.4 wyświetla ostrzeżenie, czy używasz go przed redefinicją, czy nie.JavaScript (ES6),
107106 bajtówBierze ścieżkę bezwzględną
a
i bieżącą ścieżkęc
w składni curry(a)(c)
.Przypadki testowe
Pokaż fragment kodu
źródło
[a.length]
! Czy mogę go pożyczyć, aby poprawić swoją odpowiedź na Node.js?Siatkówka ,
858382 bajtów1 bajt zapisany dzięki @MartinEnder
Wypróbuj online!
źródło
ES6 (Node.js REPL),
56,54,46, 45 bajtów[f.length]
sztuczkę z @ Arnauld za odpowiedź , -6 bajtówGrał w golfa
Test
źródło
Python 2,
135144 bajtówWypróbuj online!
Niby długo, ale chciałem zrobić rozwiązanie bez wbudowanych funkcji ścieżki.
Edycja: 9 bajtów dodanych do konta dla przypadku testowego dostarczonego przez Nathana Merrilla
źródło
Zsh + realpath, 58 bajtów
Wypróbuj online!
Wersja Bash, 62 bajty
Wypróbuj online!
źródło
Python 3 - 53 bajty
Używanie
os.path
:Pełny program (61 bajtów):
źródło
PHP, 204 bajtów
Przypadki testowe
Rozszerzony
jeśli
../../
zamiast tegoof ../..
dozwolone jest Wyjście , można je skrócić do 175 bajtówźródło
C # - 66 bajtów
Korzystanie z wbudowanego programu .NET i wymuszanie prawidłowej ścieżki:
Gdzie
f
,t
a wyjście jeststring
.Wypróbuj online!
źródło