Problems
0071 - Simplify Path
Easy
/**
 * Stack
 * Time O(N) | Space O(N)
 * https://leetcode.com/problems/simplify-path
 * @param {string} path
 * @return {string}
 */
var simplifyPath = (path, slash = '/', stack = []) => {    
    const paths = path.split(slash).filter(Boolean);

    for (const _path of paths) traversePath(_path, stack);

    return `${slash}${stack.join(slash)}`;
};

const traversePath = (path, stack) => {
    if (canPush(path)) return stack.push(path);

    if (canPop(path, stack)) stack.pop();
};

const canPush = (path) => !(
    isCurrentDirectory(path) ||
    isParentDirectory(path)
);

const canPop = (path, stack) =>
    isParentDirectory(path) &&
    !isEmpty(stack);

const isCurrentDirectory = (path) => (path === '.');

const isParentDirectory = (path) => (path === '..');

const isEmpty = ({ length }) => (0 === length);