对于此挑战,将为您提供一条绝对路径和一条“新”路径(可以是绝对路径,也可以是相对路径),并且您需要返回最终路径。
例如,如果您当前的目录是/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`
(或其他)之类的副作用吗?