Иногда длинный абсолютный путь, например, параметр командной строки для инструмента linux, может быть сокращен с использованием текущего рабочего каталога в качестве ссылки:
$ pwd
/home/heh
$ cat /home/heh/mydir/myfile
my stuff
$ cat mydir/myfile
my stuff
В этой задаче вы должны создать функцию или программу, которая получает два параметра:
- Абсолютный путь, используя формат linux (начинается с
/
) - Текущий каталог, использующий тот же формат
Вывод короче из следующего:
- Вход 1 без изменений
- Относительный путь, который относится к тому же файлу / каталогу, что и абсолютный путь
Тонкие моменты:
- Если ваша операционная система совместима с Linux, вы можете использовать текущий системный каталог, а не получать его в качестве входных данных
- Можно предположить, что входные данные содержат только буквенно-цифровые символы (и разделители пути)
- Вы можете предположить, что входной абсолютный путь не имеет разделителя пути
/
в конце - Можно предположить, что входной текущий каталог имеет разделитель пути
/
в конце - Вы не можете предполагать, что абсолютный путь относится к существующему файлу или что любая его часть является доступным каталогом; однако текущий каталог можно считать действительным
- Вы можете предположить, что ни в одном из этих путей нет символических ссылок, потому что я не хочу требовать какого-либо особого способа работы с символическими ссылками.
- Нет необходимости поддерживать случай, когда любой из входов является корневым каталогом
- «Текущий каталог» должен быть выведен как
.
(пустая строка недопустима)
Тестовые случаи (вход1, вход2, выход):
/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
источник
источник
/
в конце". Однако в ваших примерах это не так./home/test /home/user/mydir/myfile /home/test
и/a/b /a/b/d/e /a/b
Ответы:
Юлия 0,5 , 32 байта
Он использует текущий рабочий каталог в качестве базы и не может быть протестирован на TIO в данный момент.
Пример запуска
Предупреждение: это изменит вашу файловую систему.
Альтернативная версия, 35 байт (двоичный)
В качестве входных данных используется базовый каталог, поэтому его можно протестировать без изменения файловой системы.
Попробуйте онлайн!
источник
Base.-
ошибок, если явно не импортировано, нет?-
перед переопределением. В версии 0.4 выводится предупреждение, используете ли вы его перед переопределением или нет.JavaScript (ES6),
107106 байтПринимает абсолютный путь
a
и текущий путьc
в синтаксисе карри(a)(c)
.Контрольные примеры
Показать фрагмент кода
источник
[a.length]
! Могу ли я взять его, чтобы улучшить свой ответ на Node.js?Сетчатка ,
858382 байта1 байт сохранен благодаря @MartinEnder
Попробуйте онлайн!
источник
ES6 (Node.js REPL),
56,54,4645 байтов[f.length]
уловку из ответа @ Арно , -6 байтGolfed
Тестовое задание
источник
Python 2,
135144 байтаПопробуйте онлайн!
Давно, но я хотел сделать решение без встроенных функций пути.
Изменить: 9 байтов добавлены к учетной записи для теста, предоставленного Натаном Меррилл
источник
Zsh + realpath, 58 байт
Попробуйте онлайн!
Bash версия, 62 байта
Попробуйте онлайн!
источник
Python 3 - 53 байта
Использование
os.path
:Полная программа (61 байт):
источник
PHP, 204 байта
Testcases
расширенный
если
../../
вместо этогоof ../..
разрешен вывод, его можно сократить до 175 байт.источник
C # - 66 байт
Использование встроенного .NET и использование правильного пути:
Где
f
,t
и выходstring
.Попробуйте онлайн!
источник