Для этого испытания вам будет предоставлен абсолютный путь и «новый» путь (который может быть абсолютным или относительным), и вам нужно будет вернуть окончательный путь.
Например, если ваш текущий каталог был /var/tmp/test
:
my_dir
или my_dir/
должен вернуться/var/tmp/test/my_dir
../../my_dir
должен вернуться /var/my_dir
/my_dir/./
должен вернуться /my_dir
../../../../../
должен вернуться /
Чтобы быть более педантичным:
- Каталог является непустая строка , состоящая из буквенно - цифровых символов и символов
-
,_
или.
- Путь - это список из 0 или более каталогов , разделенных с помощью
/
. Абсолютный путь начинается с a/
, относительный путь - нет. Пути могут включать окончание/
.
Вам необходимо «разрешить» второй путь, учитывая первый путь.
Процесс разрешения:
- Проверьте, является ли второй путь относительным. Если это так, вставьте каталоги абсолютного пути в начало второго пути.
- Если какой-либо из каталогов есть
..
, то удалите его и предыдущий каталог. Если это первый каталог, просто удалите его. - Если какой-либо из каталогов есть
.
, то удалите его. - Выведите окончательный абсолютный путь. Вы не должны выводить окончание
/
.
Вам не нужно обрабатывать неправильный ввод. Команды должны работать независимо от того, существуют ли фактически переданные каталоги на вашем компьютере. Вы можете предположить, что все является каталогом, даже если он имеет расширение.
Контрольные примеры
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`
(или что-то)?