Для цього завдання вам буде наданий абсолютний шлях та "новий" шлях (який може бути абсолютним або відносним), і вам потрібно повернути остаточний шлях.
Наприклад, якщо ваш поточний каталог був /var/tmp/test
:
my_dir
або my_dir/
повинні повернутися/var/tmp/test/my_dir
../../my_dir
повинен повернутися /var/my_dir
/my_dir/./
повинен повернутися /my_dir
../../../../../
повинен повернутися /
Щоб бути більш педантичним:
- Каталог є непорожній рядок , що складається з буквено - цифрових символів і символів
-
,_
або.
- Шлях - це список 0 або більше каталогів , розділених за допомогою
/
. Абсолютний шлях починається з а/
, відносний шлях - ні. Шляхи можуть включати закінчення/
.
Вам потрібно "розв'язати" другий шлях, задавши перший шлях.
Процес вирішення:
- Перевірте, чи другий шлях відносний. Якщо так, то вставте каталоги абсолютного шляху до початку другого шляху.
- Якщо будь-який із каталогів є
..
, видаліть його та попередній каталог. Якщо це перший каталог, то просто видаліть його. - Якщо будь-який із каталогів є
.
, видаліть його. - Виведіть кінцевий абсолютний шлях. Не слід виводити закінчення
/
.
Вам не потрібно обробляти неправильний ввід. Команди повинні працювати, незалежно від того, чи справді передані каталоги існують на вашій машині. Можна припустити, що все - це каталог, навіть якщо він має розширення.
Тестові справи
Absolute New Output
"/a/b/c" "d" -> "/a/b/c/d"
"/a/b/c/" "d" -> "/a/b/c/d"
"/a/b/c/" "d/" -> "/a/b/c/d"
"/a/b/c" "/d" -> "/d"
"/a/b/c" "/d/" -> "/d"
"/../a/b/c/" "d" -> "/a/b/c/d"
"/a/../b/c/" "d" -> "/b/c/d"
"/a/b/../c" "d" -> "/a/c/d"
"/a/b/c/.." "d" -> "/a/b/d"
"/a/b/c/" ".." -> "/a/b"
"/a/b/c" "../d" -> "/a/b/d"
"/a/b/c" "/../d" -> "/d"
"/a/b/c" "" -> "/a/b/c"
"/a/b/c" "." -> "/a/b/c"
"/a/b/c" "./d" -> "/a/b/c/d"
"/a/b/c" "/./d" -> "/d"
"/a/b/c" "d.txt" -> "/a/b/c/d.txt"
"/a/b/c" "d." -> "/a/b/c/d."
"/a/b/c" ".txt" -> "/a/b/c/.txt"
"/a/b/c" ".txt/d" -> "/a/b/c/.txt/d"
"/a/b/." "./././." -> "/a/b"
"/direc" "tory" -> "/direc/tory"
"/a-_.b/" "__._-." -> "/a-_.b/__._-."
"/a/b" "../.." -> "/"
"/a/b" "../../.."-> "/"
"/a" "../../.."-> "/"
"/" "" -> "/"
"/" "a" -> "/a"
"/.." "a" -> "/a"
"/." "" -> "/"
Це кодовий гольф , тому робіть подання якомога коротшим на своїй улюбленій мові!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(чи щось)?