Problem Statement
In a typical filesystem, there are files, representing complete units of data. These files are contained in directories, and these directories, in turn, may be contained in other directories, and so on. A path is a pointer to a specific file or directory in this stucture. Most Unix-like OSes have a single root directory, that has all other directories and files directly or indirectly (via other directories) inside it. Such OSes use the following structure for file paths:
/<directory-name>/<directory-name>/.../<directory-name>/<file-name>
and, correspondingly, the following structure for directory paths:
/<directory-name>/<directory-name>/.../<directory-name>
For example, "/etc/passwd" (all quotes here and below are for clarity only) points to a file named "passwd" inside a directory named "etc" inside the root directory. Other valid file names might be "/home/user/pictures/me" or just "/file". In this problem, we allow only nonempty sequences of lowercase letters ('a'-'z') as file and directory names.
A special case is the root directory itself, which is referred to as just "/".
When a user works with such an OS, one of the directories is chosen as 'current'. Such a designation allows her to refer to the files in that directory without specifying the full path to the current directory. For example, if the current directory is "/home/user/pictures", then one might refer to the file "/home/user/pictures/me" as just "me" (note that such a short form can be easily spotted by the absence of the starting '/' character). Moreover, the files in subdirectories of the current directory can also be referred to in a short manner: "/home/user/pictures/others/she" can be referred to as "others/she".
And even more exciting is the ability to have short references for files outside the current folder. More specifically, ".." means "the directory one level above the current directory", "../.." means "the directory two levels above the current directory", and so on. For example, if the current directory is "/home/user/pictures", and you want to refer to "/home/top/data/file", you can express that as "../../top/data/file".
Given a
Some files and/or directories may have coinciding names, but it is impossible to have two files or two directories or a file and a directory with the same name inside the same directory, so file and directory paths are not ambiguous. It is guaranteed that the given data describes a valid file and directory according to the above rules. In particular, they will not contradict - for example, path="/home/user/some" and currentDir="/home/user/some/other" are a contradiction, since it implies that a file and a directory both named "some" exist inside the directory "/home/user".
Definition
- Class:
- RelativePath
- Method:
- makeRelative
- Parameters:
- String, String
- Returns:
- String
- Method signature:
- String makeRelative(String path, String currentDir)
- (be sure your method is public)
Notes
- A file name never ends with the '/' character. A directory name never ends with the '/' character, with the exception of the root directory, which is specified as just "/".
Constraints
- path and currentDir will each contain between 1 and 50 characters, inclusive.
- Each character of path and currentDir will be '/', or a lowercase letter ('a'-'z').
- path will contain a valid file path according to the above rules.
- currentDir will contain a valid directory path according to the above rules.
- path and currentDir will not contradict (see the last paragraph of the statement).
Examples
"/home/top/data/file"
"/home/user/pictures"
Returns: "../../top/data/file"
The example from the problem statement.
"/home/user/movies/title"
"/home/user/pictures"
Returns: "../movies/title"
And another one from the statement.
"/file"
"/"
Returns: "file"
Remember about the root directory.
"/a/b/a/b/a/b"
"/a/b/a/a/b/a/b"
Returns: "../../../../b/a/b"
Some file and directory names may be the same.
"/root/root/root"
"/root"
Returns: "root/root"
Some files and/or directories can be named "root" - but that doesn't make them root directories.
"/home/user/file"
"/home/user/files/me"
Returns: "../../file"
"/home/user/file"
"/home/user/fi"
Returns: "../file"
"/home/user/file"
"/home/user/fil/test"
Returns: "../../file"
"/z"
"/"
Returns: "z"
"/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/z"
"/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y"
Returns: "../z"
"/z/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y"
"/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y"
Returns: "../../../../../../../../../../../../../../../../../../../../../../../../../z/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y"
"/z/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x"
"/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y"
Returns: "../../../../../../../../../../../../../../../../../../../../../../../../../z/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x"
"/dira/dirb"
"/"
Returns: "dira/dirb"
"/arbimucc/v/xze/w/wl"
"/qr/b/wu/c/i/u/axxpj/mf/bgpsecnb/el/u/s/nmwpwv/dyf"
Returns: "../../../../../../../../../../../../../../arbimucc/v/xze/w/wl"
"/sdebi/n/u/jsxegszx/z/u/rro/gfo/b/nb/jjj"
"/sdebi/n/u/jsxegszx/z/u/rro/gfo/b/nb/jj"
Returns: "../jjj"
"/t/p/z/r/mfulih/f/eek/lsj/e/i/kh/qzm/uf/jxwv/q/fy"
"/t/p/z/r/mfulih/f/eek/lsj/e/i/kh/qzm/uf/jxw"
Returns: "../jxwv/q/fy"
"/b/r/pg/t/ysy/bfm/fm/kl"
"/b/r/pg/t/ysy/bfm/f"
Returns: "../fm/kl"
"/ckla/uaw/i/vy/rqlwfu/r/oqn/vfqy/w/y/zgu/w/zpduz/d"
"/ckla/uaw/i/vy/rqlwfu/r/oqn/vfqy/w/y/zgu/w/zpduz"
Returns: "d"
"/udjp/n/vj/zq/d/p/l/nqgi/kah/mwmmrz"
"/udjp/n/vj/zq/d/p/l/n/nu/rwyk/x/zat"
Returns: "../../../../../nqgi/kah/mwmmrz"
"/z/aer/bfzg/pgk/nj/qpjyb/yy/f/n/i/xtz/x/gsn/q/i"
"/z/aer/bfzg/pgk/nj/qpjyb/yy/f/n/i/xtz/x/gsk"
Returns: "../gsn/q/i"
"/c/afjj/r"
"/c/afaios/xkipq/gu/xbx/it/gn/d/i/w/cbfm/yzmz/ey"
Returns: "../../../../../../../../../../../../afjj/r"
"/txyy/xlj/fk/qbx/d/us/ivor/i/f/usi/x/bana/ygnwp/i"
"/txyy/xlj/fk/qbx/d/us/ivor/i/f/usi/x/bana/ygnw"
Returns: "../ygnwp/i"
"/nuk/k/kt/f/s"
"/nuk/k/kt/f/sy/p/d/qazjqq/f/h/vu/v/o/k"
Returns: "../../../../../../../../../../s"
"/b/a/a/a/b/a/b/b/a/a/b"
"/b/a/a/a/b/b/a/a/a/a/a/b/a/a/a/a/b/b/a/a/a/b/a/b"
Returns: "../../../../../../../../../../../../../../../../../../../a/b/b/a/a/b"
"/b/a/a/a/b/a"
"/b/a/a/a/b/aa/b/b/b/a/a/b"
Returns: "../../../../../../../a"
"/b/b/b/a/a/a/b/b/a/a/b/b/b/b/a/b/a/a/b/a/a/b/a"
"/b/b/b/a/a/a/b/b/a/a/b/b/b/b/a/b/a/a/b"
Returns: "a/a/b/a"
"/a/a/b/a/a/b/b/a/b/b/b/a/a/b"
"/a/a/b/a/b/a/b/a/b/a/b/a/a/a/a/b/a/a"
Returns: "../../../../../../../../../../../../../../a/b/b/a/b/b/b/a/a/b"
"/b/b/a/b/a/a/b/a/b/b/a/a/b/b/a/b/a/b/b/a/a/b/a/b/b"
"/b/b/a/b/a/a/b/a/b/b/a/a/b/b/a/b/a/b/b/a/a/b/a/b"
Returns: "b"
"/b/b/a/b/a/b"
"/b/b/a/b/a/ba/a/b/a/b/a/b/a/a/b/b/a/a/a"
Returns: "../../../../../../../../../../../../../../b"
"/b/b/b/a/b/a/b/b/b/a/b/a/a/b/b/a/b/b/b/b/a/a"
"/b/b/b/a/b/a/b/b/b/a/b/a/a/b/b/a/b/b/b"
Returns: "b/a/a"
"/a/a/a/a/b/a/b/a/b/b/b"
"/a/a/a/a/b/a/b/a/b/b/ba/a/b/a"
Returns: "../../../../b"
"/b/a/a/b/a/b/b/a/b/a/b/a"
"/b/a/a/b/a/a/b/a/a/b/a/b/b/a/a/b/a/b/a"
Returns: "../../../../../../../../../../../../../../b/b/a/b/a/b/a"
"/a/a/b/b/a"
"/a/a/b/b/ab/b/a/b/b/a/a"
Returns: "../../../../../../../a"
"/b/bbb/aa/baa/b/baa/aba/abbbb/a/a"
"/b/bbb/aa/baa/b/b"
Returns: "../baa/aba/abbbb/a/a"
"/b/a/ba/a/b/a/bb/b/b/b/aab/aa/aabab/a/bbbb"
"/b/a/ba/a/b/a/bb/b/b/b/aab"
Returns: "aa/aabab/a/bbbb"
"/ba/aaa/ab/bab/a/b/a/aa/babba/aa/ba/a/b"
"/ba/bb/b/b/bb/b/b/aba/b"
Returns: "../../../../../../../../aaa/ab/bab/a/b/a/aa/babba/aa/ba/a/b"
"/ba/ba/aa/ab/ab/aa/ba/abb/b/a/b/aa/aab/a/b"
"/ba/ba/aa/ab/ab/aa/ba/abb/b/a/b/aa/aab"
Returns: "a/b"
"/ab/baab/aa/ab/aaba/bbabb/b/abbb/b/b/b/aaa/a/a/bb"
"/ab/baab/aa/ab/aaba/bbabb/b/abbb/b/b/b/aa"
Returns: "../aaa/a/a/bb"
"/abaa/a/a/baaaaa/a/bb/bb/abaabb"
"/abaa/a/a/baaaaa/a/bb/bb/ab"
Returns: "../abaabb"
"/bbba/a/ab/bb/ba"
"/bbba/a/ab/bb/bab/b/aba"
Returns: "../../../ba"
"/b/aaa/aa"
"/b/aaa/aaabb/a/ba/ab/b/bba/b/b/b/bb/a/a"
Returns: "../../../../../../../../../../../../aa"
"/b/b/bb/ab/aa/aa/a/bbb/ab/ababb/ab/a/b"
"/b/b/bb/ab/aa/aa/a"
Returns: "bbb/ab/ababb/ab/a/b"
"/a/aba/b/ab/a/b/baab/a/b/a/baaab/ab/a/a/b/babb"
"/a/aba/b/a/aa/a/a/ba"
Returns: "../../../../../ab/a/b/baab/a/b/a/baaab/ab/a/a/b/babb"
"/ccbebbbabdceeaaaaedebdceeabbebcdbaeebbbadaedcbbec"
"/ccbebbbabdceeaaaaedebdceeabbebcdbaeebbbadae"
Returns: "../ccbebbbabdceeaaaaedebdceeabbebcdbaeebbbadaedcbbec"
"/ababbbaabaaaaabbaabaabbabbbbabbbabababbababaa"
"/ababbbaabaaaaabbaabaabbabbbbabbbabbaabababa"
Returns: "../ababbbaabaaaaabbaabaabbabbbbabbbabababbababaa"
"/babaaababbabbbbaababaabaaaabaababaaaabbabbba"
"/babaaababbabbbbaababaabaaaabaababaaaabbabbbabaa"
Returns: "../babaaababbabbbbaababaabaaaabaababaaaabbabbba"
"/efhaefahgiacgfgdehddidceiieaahaehcicfbdiac"
"/efhaefahgiacgfgdehddidceiibfiiaedehacbghfhdhdahfb"
Returns: "../efhaefahgiacgfgdehddidceiieaahaehcicfbdiac"
"/ebcdgcfgbebcgfbgegcbeedfa"
"/ebcdgcfgbebcgfbgeg"
Returns: "../ebcdgcfgbebcgfbgegcbeedfa"
"/gbgdbfdfdcdffcedaddegbbcef"
"/gbgdbfdfdcdffcedaddegbbcecgabagc"
Returns: "../gbgdbfdfdcdffcedaddegbbcef"
"/abbdbdbbcdebfeffadefeec"
"/abbdaacadcceefd"
Returns: "../abbdbdbbcdebfeffadefeec"
"/dbbcbadcabdabddccababcdcaccbdcadccdaabcacdbbdd"
"/dbbcbadcabdabddccababcdcacc"
Returns: "../dbbcbadcabdabddccababcdcaccbdcadccdaabcacdbbdd"
"/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"/aaaaa"
Returns: "../aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
"/jgfabjiebcceiejffihifabdfhj"
"/jgfabjiebcceiejffihifabdfhjcejjfb"
Returns: "../jgfabjiebcceiejffihifabdfhj"
"/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/aa/a/a/a/a/a"
Returns: "../../../../../../a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a"
Returns: "a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a"
Returns: "a/a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a"
Returns: "a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a"
"/a/a/a/aa"
Returns: "../a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/aa"
Returns: "../a"
"/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/aa"
Returns: "../a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
Returns: "a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
Returns: "a"
"/a/a/a/a/a/a/a/a/a/a/a/a/a"
"/a/a/a/a/a/a/a/a/a/a/a/a/aa/a/a/a/a/a"
Returns: "../../../../../../a"
"/aa/aaaa/a/aaaaa/a/a"
"/aa/aaaa/a/aa"
Returns: "../aaaaa/a/a"
"/aaaa/a/a/a/a/a/aaaa/aaa/aa/a/aaa/aaaaa/a/a/aaaa"
"/aaaa/a/a/a/a/a/aaaa/aaa/aa/a/aaa/aaaaa/a"
Returns: "a/aaaa"
"/a/aa/aaa/a/a/a/a/a/a/a/aaa/aaa/a/aa/aa"
"/a/aa/aaa/a/a/a/a"
Returns: "a/a/a/aaa/aaa/a/aa/aa"
"/a/a/aa/aaa/a/a/aaa/aa/a/aa/a/a/a/a"
"/a/a/aa/aaa/a/a/aaa/aa/a/aa/a/a/aa/aa/a/a/a/a"
Returns: "../../../../../../a/a"
"/aa/a/aa/a/a/a/aa"
"/aa/a/a/aa/aa"
Returns: "../../../aa/a/a/a/aa"
"/aa/a/aa/a/a/a/a/a/aa/aa/aa/a/a/a/aaaa/a/aaa"
"/aa/a/aa/a/a/a/a/a/aa/aa/aa/a/a/a/aaa"
Returns: "../aaaa/a/aaa"
"/aaaa/a/a/aa/aaaaa/a"
"/aaaa/a/a/a/aaaa/a/a/aaaa/a/a/aa/a"
Returns: "../../../../../../../../../aa/aaaaa/a"
"/a/a/a/aaaaaa/aaa/aaa/a/aaa/aaa/a/aaa/aaa/aa"
"/a/a/a/aaaaaa/aaa/aaa/a/aaa/aaa/a/aaa/aaa/aaa/a"
Returns: "../../aa"
"/a/aa/a/a/a/a/aaaaaaaaaaa/aa/aaaa/a"
"/a/aa/a/a/a/a/aaaaaaaaaaa/aa/aa/a/a/aa/aaa/a"
Returns: "../../../../../../aaaa/a"
"/a/a/a/a/a/aa/aaaaaa/aaa/a/aaa/aaaaaaa/a"
"/a/a/a/a/a/aa/aaaaaa/aaa/a/aaa/a"
Returns: "../aaaaaaa/a"
"/a/b/c"
"/a/b/cc/d"
Returns: "../../c"
"/a/b/c"
"/a/b/cc"
Returns: "../c"
"/hi/hello/how/u"
"/hi/hello/how/are/you"
Returns: "../../u"
"/rhs/room/root/rooz"
"/rhs/root"
Returns: "../room/root/rooz"
"/a/b/c/sss/sss/sss/file"
"/a/sss/file"
Returns: "../../b/c/sss/sss/sss/file"
"/abcdef"
"/abc/ef"
Returns: "../../abcdef"
"/aaa/bb"
"/aaa/bbbb/aaa/bbbb/aaa/bbbb/aaa/bbbb/aaa/bbbbbbbbb"
Returns: "../../../../../../../../../bb"
"/home"
"/ho"
Returns: "../home"
"/sdf/sdf"
"/sdf/sdd"
Returns: "../sdf"
"/a"
"/ab/c"
Returns: "../../a"
"/adam"
"/adams"
Returns: "../adam"
"/aaa/aaa/aaa/aaa"
"/aaa/aaa/aaa/aaaaa"
Returns: "../aaa"
"/home/user/pictures/others/she"
"/others/she"
Returns: "../../home/user/pictures/others/she"
"/ishan/abc"
"/ishanc"
Returns: "../ishan/abc"
"/a/b/b/b/b/b/b/b/b/b/b"
"/a/a/b/b/b/b/b/b/b/b/b"
Returns: "../../../../../../../../../../b/b/b/b/b/b/b/b/b/b"
"/test/t/t/test"
"/test/test/test/test/test"
Returns: "../../../../t/t/test"
"/aa"
"/a"
Returns: "../aa"
"/rootabc/de"
"/root"
Returns: "../rootabc/de"
"/aa/aaa/aaaa/aaaaac/aa"
"/aa/aaa/aaaa/aaaaabcd"
Returns: "../aaaaac/aa"
"/aaaaaaaaaa/bbbbbbb/ccccc"
"/aaaaaaaa"
Returns: "../aaaaaaaaaa/bbbbbbb/ccccc"
"/r"
"/root"
Returns: "../r"
"/aaa"
"/a"
Returns: "../aaa"
"/abc/abc"
"/abcd/abc"
Returns: "../../abc/abc"
"/abc/abc"
"/abc/ab"
Returns: "../abc"
"/abc/ddef"
"/abc/def"
Returns: "../ddef"
"/ishan/abc"
"/ishancc"
Returns: "../ishan/abc"
"/a/b/a/b"
"/a/c/a/b"
Returns: "../../../b/a/b"
"/f"
"/file"
Returns: "../f"
"/aa/bbb/cc"
"/aa/bb"
Returns: "../bbb/cc"
"/abcd/c"
"/abafsf/f"
Returns: "../../abcd/c"
"/dupaztrupa"
"/dupazszkiel"
Returns: "../dupaztrupa"
"/a/b/c/d/e/a/b/c/e/f/g/h/i/j/k/r/p/q/s/z/d/q/f/z"
"/a/b/c/d/e/a/b/c/e/f/g/h/d/o/p/q/a/z/r/l/f/v/b/n"
Returns: "../../../../../../../../../../../../i/j/k/r/p/q/s/z/d/q/f/z"
"/home/file/user"
"/home/fil"
Returns: "../file/user"
"/abcde"
"/abefx"
Returns: "../abcde"
"/a/b/a/b/a/b"
"/b/b"
Returns: "../../a/b/a/b/a/b"
"/rat/rct"
"/rat/rbt"
Returns: "../rct"
"/aaa/qwe/rty"
"/aaa/qzx/cvb"
Returns: "../../qwe/rty"
"/rootabc/root/root"
"/root"
Returns: "../rootabc/root/root"
"/a/bcd/ef"
"/a/bc"
Returns: "../bcd/ef"
"/ab/cde/gfgf"
"/ab/cgg/gfgfd/h"
Returns: "../../../cde/gfgf"
"/filefile"
"/file"
Returns: "../filefile"
"/rootf/z"
"/root/zxc"
Returns: "../../rootf/z"
"/home/top/data/file"
"/home/topr/pictures"
Returns: "../../top/data/file"
"/po/llp"
"/po/llh/lp/pl"
Returns: "../../../llp"
"/a/b/c/d/e/f"
"/"
Returns: "a/b/c/d/e/f"
"/a/b/c/d/e/f/g/h/file"
"/aaa/c/d/e/f/g/h"
Returns: "../../../../../../../a/b/c/d/e/f/g/h/file"
"/ab/a/ab/a/b/aab/a"
"/ab/aab/b/aab/a/ab/a/ab/a/b/aab/a"
Returns: "../../../../../../../../../../../a/ab/a/b/aab/a"
"/rot"
"/root/root/root"
Returns: "../../../rot"
"/abc/def/a"
"/ab/def"
Returns: "../../abc/def/a"
"/a/b/c/aaaaa/a/b/c"
"/a/b/c/aaabb/a/b/c"
Returns: "../../../../aaaaa/a/b/c"
"/home/a/b"
"/hole/a/b"
Returns: "../../../home/a/b"
"/g/hi/hello"
"/g/h"
Returns: "../hi/hello"
"/h/x"
"/home/user/pictures"
Returns: "../../../h/x"
"/aa"
"/b"
Returns: "../aa"
"/a/bc/d"
"/a/bd/c"
Returns: "../../bc/d"
"/home/top/data/file"
"/home/tuser/pictures"
Returns: "../../top/data/file"
"/abc/abs"
"/abc/ab"
Returns: "../abs"
"/su/zulo/file"
"/su/zu"
Returns: "../zulo/file"
"/ab/a"
"/a"
Returns: "../ab/a"
"/a/aa/a"
"/aa"
Returns: "../a/aa/a"
"/aab"
"/aa"
Returns: "../aab"
"/home/user/movies/title"
"/home/uses/pictures"
Returns: "../../user/movies/title"
"/home/home/file"
"/home/hom"
Returns: "../home/file"
"/ab/ddg"
"/ac/ddd"
Returns: "../../ab/ddg"
"/home/cos"
"/home/coe"
Returns: "../cos"
"/h"
"/home/haha"
Returns: "../../h"
"/ab/c"
"/a"
Returns: "../ab/c"
"/ab"
"/a"
Returns: "../ab"
"/foo/bar/baz"
"/foo/ba"
Returns: "../bar/baz"
"/home/use/pictures"
"/home/user/pictures"
Returns: "../../use/pictures"
"/habcdcddddddddddddd"
"/home/user/pictures"
Returns: "../../../habcdcddddddddddddd"
"/home/top/data/file"
"/home/toser/pictures"
Returns: "../../top/data/file"
"/root/root/root"
"/roo"
Returns: "../root/root/root"
"/a/abc"
"/a/ab"
Returns: "../abc"
"/a/bbb/a/b/a/b"
"/a/b/a/a/b/a/b"
Returns: "../../../../../../bbb/a/b/a/b"
"/file/a"
"/fi"
Returns: "../file/a"
"/aaaaa"
"/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a/a"
Returns: "../../../../../../../../../../../../../../../../../../../../../../../../aaaaa"
"/roota"
"/rootb"
Returns: "../roota"
"/ahmed"
"/ahme"
Returns: "../ahmed"
"/aaaaaaaaaac"
"/aaaaaaaaaab"
Returns: "../aaaaaaaaaac"
"/a/b/c/d/e/f/g/h/file"
"/a/b/c/d/e/f/g/h"
Returns: "file"
"/abc/def"
"/ab/def"
Returns: "../../abc/def"
"/rooting"
"/root"
Returns: "../rooting"
"/rro/rro"
"/rro/r"
Returns: "../rro"
"/aab/a"
"/aa"
Returns: "../aab/a"
"/a/a/a/a/a"
"/b"
Returns: "../a/a/a/a/a"
"/home/top/data"
"/home/topper/datahouse"
Returns: "../../top/data"
"/ab/cccdeh/gfgf"
"/ab/cccgg/gfgfd/h"
Returns: "../../../cccdeh/gfgf"
"/hogea/file"
"/hogeb"
Returns: "../hogea/file"
"/test/test"
"/"
Returns: "test/test"
"/aaaa"
"/aa"
Returns: "../aaaa"
"/dir/aadir"
"/dir/aa"
Returns: "../aadir"
"/a/b/ccc"
"/a/b/cccc/ccc"
Returns: "../../ccc"
"/abc/a/a/abd"
"/abc/a/a/abc"
Returns: "../abd"
"/aaa"
"/aa"
Returns: "../aaa"
"/root/a/b/c"
"/root/alpha/beta/gamma"
Returns: "../../../a/b/c"
"/b/a/b/a"
"/a/b/a"
Returns: "../../../b/a/b/a"
"/home/user/picturesa"
"/home/user/pictures"
Returns: "../picturesa"
"/abcz"
"/abc/abc/home"
Returns: "../../../abcz"
"/rooter"
"/root"
Returns: "../rooter"
"/ab/abc"
"/a"
Returns: "../ab/abc"
"/xxxx"
"/xx"
Returns: "../xxxx"
"/roqqxx/bv"
"/rovvxx/bv"
Returns: "../../roqqxx/bv"
"/file"
"/a/a"
Returns: "../../file"
"/ro/ro"
"/rp"
Returns: "../ro/ro"
"/a/b/c/aaaaa/a/b/c"
"/a/b/c/aaa/a/b/c"
Returns: "../../../../aaaaa/a/b/c"
"/aa"
"/ab"
Returns: "../aa"
"/abcz/abc"
"/abczz/abc/home"
Returns: "../../../abcz/abc"
"/ab"
"/a/b"
Returns: "../../ab"
"/abc/abcc"
"/abcd"
Returns: "../abc/abcc"
"/a/b/cccc"
"/a/b/c"
Returns: "../cccc"
"/aa/bb/cc"
"/aaaa"
Returns: "../aa/bb/cc"
"/alma/alma/k"
"/alma/alfa"
Returns: "../alma/k"
"/cd/cd/dir/pin"
"/cd/cd/din/pin"
Returns: "../../dir/pin"
"/abcd"
"/ab"
Returns: "../abcd"
"/a/b/aaab/b/a/b"
"/a/b/aaaa/a/b/a/b"
Returns: "../../../../../aaab/b/a/b"
"/file"
"/test"
Returns: "../file"
"/a/b/abc"
"/a/b/a"
Returns: "../abc"
"/a/bcd"
"/a/b"
Returns: "../bcd"
"/a/a/aaaa"
"/a/a/aa"
Returns: "../aaaa"
"/file/ro/ro"
"/file/rp"
Returns: "../ro/ro"