Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Employee {
- /**
- *
- * @param {Employee} supervisor
- * @param {Employee[]} subordinates
- * @param {boolean} hasCar
- */
- constructor(name, supervisor, subordinates, hasCar) {
- this.name = name ? name : 'hmm';
- this.supervisor = supervisor ? supervisor : undefined;
- this.subordinates = subordinates ? subordinates : [];
- this.hasCar = hasCar ? hasCar : false;
- }
- getSupervisor() {
- return this.supervisor;
- }
- getSubordinates() {
- return this.subordinates;
- }
- findFirstWithCompanyCar() {
- // history of visited employees
- let visited = new Set();
- let current = this;
- while (current) {
- let theOne = this.checkSubordinates(current, visited);
- if (theOne) return theOne;
- current = current.supervisor;
- }
- return undefined;
- }
- checkSubordinates(employee, visited) {
- if (!visited.has(employee)) {
- // add to visited
- visited.add(employee);
- // are you the one we are looking for?
- if (employee.hasCar) return employee;
- // do your subordinates have cars?
- if (employee.subordinates) {
- for (let emp of employee.subordinates) {
- let theOne = this.checkSubordinates(emp, visited);
- if (theOne) return theOne;
- }
- }
- }
- return undefined;
- }
- }
- let worker11 = new Employee('worker11', undefined, undefined, false);
- let worker12 = new Employee('worker12', undefined, undefined, false);
- let worker13 = new Employee('worker13', undefined, undefined, false);
- let worker21 = new Employee('worker21', undefined, undefined, false);
- let worker22 = new Employee('worker22', undefined, undefined, false);
- let manager1 = new Employee('manager1', undefined, [worker11, worker12, worker13], false);
- let manager2 = new Employee('manager2', undefined, [worker21, worker22], true);
- let boss = new Employee('boss', undefined, [manager1, manager2], false);
- worker11.supervisor = manager1;
- worker12.supervisor = manager1;
- worker13.supervisor = manager1;
- worker21.supervisor = manager2;
- worker22.supervisor = manager2;
- manager1.supervisor = boss;
- manager2.supervisor = boss;
- let theOne = worker11.findFirstWithCompanyCar();
- if (theOne) {
- console.log(theOne.name);
- } else {
- console.log('nema');
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement