Advertisement
Guest User

employee

a guest
Aug 19th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Employee {
  2.   /**
  3.    *
  4.    * @param {Employee} supervisor
  5.    * @param {Employee[]} subordinates
  6.    * @param {boolean} hasCar
  7.    */
  8.   constructor(name, supervisor, subordinates, hasCar) {
  9.     this.name = name ? name : 'hmm';
  10.     this.supervisor = supervisor ? supervisor : undefined;
  11.     this.subordinates = subordinates ? subordinates : [];
  12.     this.hasCar = hasCar ? hasCar : false;
  13.   }
  14.  
  15.   getSupervisor() {
  16.     return this.supervisor;
  17.   }
  18.  
  19.   getSubordinates() {
  20.     return this.subordinates;
  21.   }
  22.  
  23.   findFirstWithCompanyCar() {
  24.     // history of visited employees
  25.     let visited = new Set();
  26.  
  27.     let current = this;
  28.     while (current) {
  29.       let theOne = this.checkSubordinates(current, visited);
  30.       if (theOne) return theOne;
  31.  
  32.       current = current.supervisor;
  33.     }
  34.  
  35.     return undefined;
  36.   }
  37.  
  38.   checkSubordinates(employee, visited) {
  39.     if (!visited.has(employee)) {
  40.       // add to visited
  41.       visited.add(employee);
  42.       // are you the one we are looking for?
  43.       if (employee.hasCar) return employee;
  44.       // do your subordinates have cars?
  45.       if (employee.subordinates) {
  46.         for (let emp of employee.subordinates) {
  47.           let theOne = this.checkSubordinates(emp, visited);
  48.           if (theOne) return theOne;
  49.         }
  50.       }
  51.     }
  52.  
  53.     return undefined;
  54.   }
  55.  
  56. }
  57.  
  58. let worker11 = new Employee('worker11', undefined, undefined, false);
  59. let worker12 = new Employee('worker12', undefined, undefined, false);
  60. let worker13 = new Employee('worker13', undefined, undefined, false);
  61. let worker21 = new Employee('worker21', undefined, undefined, false);
  62. let worker22 = new Employee('worker22', undefined, undefined, false);
  63. let manager1 = new Employee('manager1', undefined, [worker11, worker12, worker13], false);
  64. let manager2 = new Employee('manager2', undefined, [worker21, worker22], true);
  65. let boss = new Employee('boss', undefined, [manager1, manager2], false);
  66.  
  67. worker11.supervisor = manager1;
  68. worker12.supervisor = manager1;
  69. worker13.supervisor = manager1;
  70. worker21.supervisor = manager2;
  71. worker22.supervisor = manager2;
  72. manager1.supervisor = boss;
  73. manager2.supervisor = boss;
  74.  
  75.  
  76. let theOne = worker11.findFirstWithCompanyCar();
  77. if (theOne) {
  78.   console.log(theOne.name);
  79. } else {
  80.   console.log('nema');
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement