このチャレンジでは、絶対パスと「新しい」パス(絶対パスまたは相対パス)が与えられ、最終パスを返す必要があります。
たとえば、現在のディレクトリが/var/tmp/test
次の場合:
my_dir
またはmy_dir/
戻る必要があります/var/tmp/test/my_dir
../../my_dir
帰るべき /var/my_dir
/my_dir/./
帰るべき /my_dir
../../../../../
帰るべき /
もっと用心深くなるには:
- ディレクトリには、英数字と記号からなる非空の文字列である
-
、_
または.
- パスは、を使用して区切られた0個以上のディレクトリのリストです
/
。絶対パスはで始まり/
、相対パスはそうではありません。パスには終了を含めることができます/
。
最初のパスを指定して、2番目のパスを「解決」する必要があります。
解決のプロセスは次のとおりです。
- 2番目のパスが相対パスかどうかをテストします。その場合、絶対パスのディレクトリを2番目のパスの先頭に挿入します。
- いずれかのディレクトリがの場合、そのディレクトリと
..
前のディレクトリを削除します。最初のディレクトリである場合は、単に削除します。 - いずれかのディレクトリがの
.
場合、それを削除します。 - 最終的な絶対パスを出力します。エンディングを出力しないでください
/
。
誤った入力を処理する必要はありません。渡されたディレクトリが実際にマシンに存在するかどうかに関係なく、コマンドは機能するはずです。拡張子が付いていても、すべてがディレクトリであると想定できます。
テストケース
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`
(または何か)のような副作用?