Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function removePersonByName(personsArray, name) {
- return personsArray.filter((person) => person.name !== name);
- }
- function findNeighbour(person, restOfPersons) {
- const { close } = person;
- close.sort();
- for (let i = 0; i < close.length; i++) {
- const key = close[i]; // We can use first element as a key since we
- // sort array of string alphabetically
- const closestPerson = restOfPersons.find(((p) => p.name === key));
- if (closestPerson) {
- return closestPerson;
- }
- }
- return false; // return first element if there is no closes left
- }
- function placeGuests(arr) {
- const result = [];
- let restOfPeople = [...arr]; // Clone an array in order to not mutate input
- let currentElement = arr[0];
- for (let i = 0; i < arr.length; i++) {
- if (i === 0) {
- // We know that array is sorted by name so we have to skip the first step and pop ;
- restOfPeople = removePersonByName(restOfPeople, currentElement.name);
- result.push(currentElement);
- currentElement = arr[1]; // forcibly run algorithm top a next step
- }
- const closest = findNeighbour(currentElement, restOfPeople);
- if (closest) {
- result.push(closest);
- restOfPeople = removePersonByName(restOfPeople, closest.name);
- currentElement = closest;
- }
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement