Skip to main content

change directory (cd) function for an abstract file system ( Java Implementation )

Write a function that provides change directory (cd) function for an abstract file system.

Notes:

Root path is '/'.
Path separator is '/'.
Parent directory is addressable as "..".
Directory names consist only of English alphabet letters (A-Z and a-z).
For example, new Path("/a/b/c/d").cd("../x").getPath() should return "/a/b/c/x".

Note: The evaluation environment uses '\' as the path separator.


public class Path {
    private String path;

    public Path(String path) {
        this.path = path;
    }

    public String getPath() {
        return path;
    }

    public Path cd(String newPath) {
        //throw new UnsupportedOperationException("Waiting to be implemented.");
String[] newP=newPath.split("/");
    String[] oldP=path.split("/");
    int lnCount=0;
    for(String str:newP){
    if(str.equals("..")){
    lnCount++;
    }
    }
   
    int len=oldP.length;
    String strOut="";
    for(int i=0;i<len-lnCount;i++){
    strOut=strOut+oldP[i]+"/";
    }
   
    len=newP.length;
    for(int i=0;i<len;i++){
    if(!newP[i].equals("..")){
    strOut=strOut+newP[i]+"/";
    }
    }
    path=strOut.substring(0, strOut.length()-1);
        System.out.println(path);
    if(path.indexOf("/")<0)
    throw new UnsupportedOperationException("Directory not found");
    return this;
    }

    public static void main(String[] args) {
        Path path = new Path("/a/b/c/d");
        System.out.println(path.cd("../x").getPath());
    }
}


Output:
--------------------

/a/b/c/x


Comments

  1. nice soloution but it should be in other languages also Like PHP

    ReplyDelete
    Replies
    1. For PHP

      class Path
      {
      public $currentPath;

      function __construct($path)
      {
      $this->currentPath = $path;
      }

      public function cd($newPath)
      {
      $newP = explode('/',$newPath);
      $oldP = explode('/', $this->currentPath);

      $inCount = 0;
      foreach($newP as $str) {
      if($str == '..'){
      $inCount++;
      }
      }

      $oldLen = count($oldP);
      $strOut= '';
      for($i=0;$i<($oldLen - $inCount);$i++){
      $strOut .=$oldP[$i]."/";
      }

      $newLen = count($newP);
      for($i=0;$i<$newLen;$i++){
      if($newP[$i] !='..'){
      $strOut = $strOut.$newP[$i].'/';
      }
      }
      $this->currentPath = $strOut;
      }

      }

      Delete
    2. #include
      #include
      #include

      class Path
      {
      public:

      Path(std::string path)
      {
      currentPath = path;
      }

      std::string getPath() const
      {
      return currentPath;
      }

      Path cd(std::string newPath) const
      {
      Path p = *this;

      if (newPath == "/")
      {
      p.currentPath = "/";

      return p;
      }

      while (newPath.size())
      {
      if (newPath.size() >= 2)
      {
      if (newPath[0] == '.' && newPath[1] == '.')
      {
      if (!p.currentPath.empty())
      {
      p.currentPath.erase(p.currentPath.find_last_of("/\\"));

      if (p.currentPath.empty())
      {
      p.currentPath = "/";
      }
      }

      newPath.erase(0, 2);

      continue;
      }
      }

      if (newPath[0] == '/' || newPath[0] == '\\')
      {
      newPath.erase(0, 1);

      if (newPath[0] == '.')
      continue;
      }

      auto i = newPath.find_first_of("/\\");

      if (p.currentPath.back() != '/' && p.currentPath.back() != '\\')
      {
      p.currentPath += "/";
      }

      p.currentPath += newPath.substr(0, i);

      newPath.erase(0, i);
      }

      return p;
      }

      private:

      std::string currentPath;
      };


      #ifndef RunTests
      int main()
      {
      Path path("/a/b/c/d");
      std::cout << path.cd("../x").getPath();
      }
      #endif

      Delete

Post a Comment

Popular posts from this blog

CODILITY: Determine whether given string of parentheses is properly nested.

Task description A string S consisting of N characters is called  properly nested  if: S is empty; S has the form " (U) " where U is a properly nested string; S has the form " VW " where V and W are properly nested strings. For example, string " (()(())()) " is properly nested but string " ()) " isn't. Write a function: class Solution { public int solution(String S); } that, given a string S consisting of N characters, returns 1 if string S is properly nested and 0 otherwise. For example, given S = " (()(())()) ", the function should return 1 and given S = " ()) ", the function should return 0, as explained above. Assume that: N is an integer within the range [ 0 .. 1,000,000 ]; string S consists only of the characters " ( " and/or " ) ". Complexity: expected worst-case time complexity is O(N); expected worst-case space complexity is O(1) (not counting the storage requi...

Distinct: Compute number of distinct values in an array.

Task description Write a function class Solution { public int solution(int[] A); } that, given a zero-indexed array A consisting of N integers, returns the number of distinct values in array A. Assume that: N is an integer within the range [ 0 .. 100,000 ]; each element of array A is an integer within the range [ −1,000,000 .. 1,000,000 ]. For example, given array A consisting of six elements such that: A[0] = 2 A[1] = 1 A[2] = 1 A[3] = 2 A[4] = 3 A[5] = 1 the function should return 3, because there are 3 distinct values appearing in array A, namely 1, 2 and 3. Complexity: expected worst-case time complexity is O(N*log(N)); expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments). Elements of input arrays can be modified. class Solution { public int solution ( int [] A) { // write your code in Java SE 8 int len=A.length; int count= 1 ; ...