이 문제를 해결하려면 절대 경로와 "새"경로 (절대 또는 상대 경로)가 제공되며 최종 경로를 반환해야합니다.
예를 들어, 현재 디렉토리가 /var/tmp/test
다음과 같은 경우
my_dir
또는 my_dir/
돌아와야한다/var/tmp/test/my_dir
../../my_dir
돌아와야한다 /var/my_dir
/my_dir/./
돌아와야한다 /my_dir
../../../../../
돌아와야한다 /
더 pedantic하려면 :
- 디렉토리는 알파벳 문자로 구성된 비어 있지 않은 문자열과 기호
-
,_
또는.
- 경로 는를 사용하여 분리 된 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"
"/." "" -> "/"
이것은 code-golf 이므로 원하는 언어로 가능한 한 짧게 제출하십시오!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(또는 무엇인가) 부작용 ?