Untuk tantangan ini, Anda akan diberikan jalur absolut, dan jalur "baru" (yang bisa absolut atau relatif), dan Anda harus mengembalikan jalur terakhir.
Misalnya, jika direktori Anda saat ini adalah /var/tmp/test
:
my_dir
atau my_dir/
harus kembali/var/tmp/test/my_dir
../../my_dir
harus kembali /var/my_dir
/my_dir/./
harus kembali /my_dir
../../../../../
harus kembali /
Untuk menjadi lebih bertele-tele:
- Sebuah direktori adalah string non-kosong yang terdiri dari karakter alfanumerik dan simbol-simbol
-
,_
atau.
- Path adalah daftar 0 atau lebih direktori , dipisahkan menggunakan
/
. Jalur absolut dimulai dengan a/
, jalur relatif tidak. Jalur dapat menyertakan akhiran/
.
Anda perlu "menyelesaikan" jalur kedua, mengingat jalur pertama.
Proses penyelesaiannya adalah:
- Uji apakah jalur kedua relatif. Jika demikian, maka masukkan direktori jalur absolut ke awal jalur kedua.
- Jika ada salah satu direktori
..
, maka hapus dan direktori sebelumnya. Jika ini adalah direktori pertama, cukup hapus saja. - Jika ada direktori
.
, maka hapus. - Keluarkan jalan absolut terakhir. Anda seharusnya tidak menghasilkan akhir
/
.
Anda tidak perlu menangani input yang salah. Perintah harus bekerja, apakah direktori yang dilewati benar-benar ada di mesin Anda. Anda dapat mengasumsikan bahwa semuanya adalah direktori, bahkan jika ia memiliki ekstensi.
Uji kasus
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"
"/." "" -> "/"
Ini adalah kode-golf , jadi buat kiriman Anda sesingkat mungkin dalam bahasa favorit Anda!
mkdir $patha; cd $patha; mkdir $pathb; cd $pathb; echo `abspath`
(atau sesuatu)?