Created
May 27, 2024 18:51
-
-
Save 7daysofrain/5b22e14677a70cf12f69ca34f8eaca34 to your computer and use it in GitHub Desktop.
Animals
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const data = { | |
animals: [ | |
{ | |
id: '0938aa23-f153-4937-9f88-4858b24d6bce', | |
name: 'lions', | |
popularity: 4, | |
location: 'NE', | |
residents: [ | |
{ | |
name: 'Zena', | |
sex: 'female', | |
age: 12 | |
}, | |
{ | |
name: 'Maxwell', | |
sex: 'male', | |
age: 15 | |
}, | |
{ | |
name: 'Faustino', | |
sex: 'male', | |
age: 7 | |
}, | |
{ | |
name: 'Dee', | |
sex: 'female', | |
age: 14 | |
} | |
] | |
}, | |
{ | |
id: 'e8481c1d-42ea-4610-8e11-1752cfc05a46', | |
name: 'tigers', | |
popularity: 5, | |
location: 'NW', | |
residents: [ | |
{ | |
name: 'Shu', | |
sex: 'female', | |
age: 19 | |
}, | |
{ | |
name: 'Esther', | |
sex: 'female', | |
age: 17 | |
} | |
] | |
}, | |
{ | |
id: 'baa6e93a-f295-44e7-8f70-2bcdc6f6948d', | |
name: 'bears', | |
popularity: 5, | |
location: 'NW', | |
residents: [ | |
{ | |
name: 'Hiram', | |
sex: 'male', | |
age: 4 | |
}, | |
{ | |
name: 'Edwardo', | |
sex: 'male', | |
age: 4 | |
}, | |
{ | |
name: 'Milan', | |
sex: 'male', | |
age: 4 | |
}, | |
] | |
}, | |
{ | |
id: 'ef3778eb-2844-4c7c-b66c-f432073e1c6b', | |
name: 'penguins', | |
popularity: 4, | |
location: 'SE', | |
residents: [ | |
{ | |
name: 'Joe', | |
sex: 'male', | |
age: 10 | |
}, | |
{ | |
name: 'Tad', | |
sex: 'male', | |
age: 12 | |
}, | |
{ | |
name: 'Keri', | |
sex: 'female', | |
age: 2 | |
}, | |
{ | |
name: 'Nicholas', | |
sex: 'male', | |
age: 2 | |
}, | |
] | |
}, | |
{ | |
id: '533bebf3-6bbe-41d8-9cdf-46f7d13b62ae', | |
name: 'otters', | |
popularity: 4, | |
location: 'SE', | |
residents: [ | |
{ | |
name: 'Neville', | |
sex: 'male', | |
age: 9 | |
}, | |
{ | |
name: 'Lloyd', | |
sex: 'male', | |
age: 8 | |
}, | |
{ | |
name: 'Mercedes', | |
sex: 'female', | |
age: 9 | |
}, | |
{ | |
name: 'Margherita', | |
sex: 'female', | |
age: 10 | |
}, | |
] | |
}, | |
{ | |
id: '89be95b3-47e4-4c5b-b687-1fabf2afa274', | |
name: 'frogs', | |
popularity: 2, | |
location: 'SW', | |
residents: [ | |
{ | |
name: 'Cathey', | |
sex: 'female', | |
age: 3 | |
}, | |
{ | |
name: 'Annice', | |
sex: 'female', | |
age: 2 | |
} | |
] | |
}, | |
{ | |
id: '78460a91-f4da-4dea-a469-86fd2b8ccc84', | |
name: 'snakes', | |
popularity: 3, | |
location: 'SW', | |
residents: [ | |
{ | |
name: 'Paulette', | |
sex: 'female', | |
age: 5 | |
}, | |
{ | |
name: 'Bill', | |
sex: 'male', | |
age: 6 | |
} | |
] | |
}, | |
{ | |
id: 'bb2a76d8-5fe3-4d03-84b7-dba9cfc048b5', | |
name: 'elephants', | |
popularity: 5, | |
location: 'NW', | |
residents: [ | |
{ | |
name: 'Ilana', | |
sex: 'female', | |
age: 11 | |
}, | |
{ | |
name: 'Orval', | |
sex: 'male', | |
age: 15 | |
}, | |
{ | |
name: 'Bea', | |
sex: 'female', | |
age: 12 | |
}, | |
{ | |
name: 'Jefferson', | |
sex: 'male', | |
age: 4 | |
}, | |
] | |
}, | |
{ | |
id: '01422318-ca2d-46b8-b66c-3e9e188244ed', | |
name: 'giraffes', | |
popularity: 4, | |
location: 'NE', | |
residents: [ | |
{ | |
name: 'Gracia', | |
sex: 'female', | |
age: 11 | |
}, | |
{ | |
name: 'Antone', | |
sex: 'male', | |
age: 9 | |
}, | |
{ | |
name: 'Vicky', | |
sex: 'female', | |
age: 12 | |
}, | |
{ | |
name: 'Clay', | |
sex: 'male', | |
age: 4 | |
}, | |
{ | |
name: 'Arron', | |
sex: 'male', | |
age: 7 | |
}, | |
{ | |
name: 'Bernard', | |
sex: 'male', | |
age: 6 | |
} | |
] | |
} | |
], | |
employees: [ | |
{ | |
id: 'c5b83cb3-a451-49e2-ac45-ff3f54fbe7e1', | |
firstName: 'Nigel', | |
lastName: 'Nelson', | |
managers: ['0e7b460e-acf4-4e17-bcb3-ee472265db83', | |
'fdb2543b-5662-46a7-badc-93d960fdc0a8'], | |
responsibleFor: ['0938aa23-f153-4937-9f88-4858b24d6bce', | |
'e8481c1d-42ea-4610-8e11-1752cfc05a46'] | |
}, | |
{ | |
id: '0e7b460e-acf4-4e17-bcb3-ee472265db83', | |
firstName: 'Burl', | |
lastName: 'Bethea', | |
managers: ['9e7d4524-363c-416a-8759-8aa7e50c0992'], | |
responsibleFor: ['0938aa23-f153-4937-9f88-4858b24d6bce', | |
'e8481c1d-42ea-4610-8e11-1752cfc05a46', | |
'baa6e93a-f295-44e7-8f70-2bcdc6f6948d', | |
'ef3778eb-2844-4c7c-b66c-f432073e1c6b'] | |
}, | |
{ | |
id: 'fdb2543b-5662-46a7-badc-93d960fdc0a8', | |
firstName: 'Ola', | |
lastName: 'Orloff', | |
managers: ['9e7d4524-363c-416a-8759-8aa7e50c0992'], | |
responsibleFor: ['533bebf3-6bbe-41d8-9cdf-46f7d13b62ae', | |
'89be95b3-47e4-4c5b-b687-1fabf2afa274', | |
'78460a91-f4da-4dea-a469-86fd2b8ccc84', | |
'bb2a76d8-5fe3-4d03-84b7-dba9cfc048b5'] | |
}, | |
{ | |
id: '56d43ba3-a5a7-40f6-8dd7-cbb05082383f', | |
firstName: 'Wilburn', | |
lastName: 'Wishart', | |
managers: ['0e7b460e-acf4-4e17-bcb3-ee472265db83', | |
'fdb2543b-5662-46a7-badc-93d960fdc0a8'], | |
responsibleFor: ['78460a91-f4da-4dea-a469-86fd2b8ccc84', | |
'bb2a76d8-5fe3-4d03-84b7-dba9cfc048b5'] | |
}, | |
{ | |
id: '9e7d4524-363c-416a-8759-8aa7e50c0992', | |
firstName: 'Stephanie', | |
lastName: 'Strauss', | |
managers: [], | |
responsibleFor: ['01422318-ca2d-46b8-b66c-3e9e188244ed'] | |
}, | |
{ | |
id: '4b40a139-d4dc-4f09-822d-ec25e819a5ad', | |
firstName: 'Sharonda', | |
lastName: 'Spry', | |
managers: ['0e7b460e-acf4-4e17-bcb3-ee472265db83', | |
'fdb2543b-5662-46a7-badc-93d960fdc0a8'], | |
responsibleFor: ['533bebf3-6bbe-41d8-9cdf-46f7d13b62ae', | |
'89be95b3-47e4-4c5b-b687-1fabf2afa274'] | |
}, | |
{ | |
id: 'c1f50212-35a6-4ecd-8223-f835538526c2', | |
firstName: 'Ardith', | |
lastName: 'Azevado', | |
managers: ['b0dc644a-5335-489b-8a2c-4e086c7819a2'], | |
responsibleFor: ['e8481c1d-42ea-4610-8e11-1752cfc05a46', | |
'baa6e93a-f295-44e7-8f70-2bcdc6f6948d'] | |
}, | |
{ | |
id: 'b0dc644a-5335-489b-8a2c-4e086c7819a2', | |
firstName: 'Emery', | |
lastName: 'Elser', | |
managers: ['9e7d4524-363c-416a-8759-8aa7e50c0992'], | |
responsibleFor: ['bb2a76d8-5fe3-4d03-84b7-dba9cfc048b5', | |
'baa6e93a-f295-44e7-8f70-2bcdc6f6948d', | |
'0938aa23-f153-4937-9f88-4858b24d6bce'] | |
} | |
], | |
hours: { 'Tuesday': { open: 8, close: 18 }, | |
'Wednesday': { open: 8, close: 18 }, | |
'Thursday': { open: 10, close: 20 }, | |
'Friday': { open: 10, close: 20 }, | |
'Saturday': { open: 8, close: 22 }, | |
'Sunday': { open: 8, close: 20 }, | |
'Monday': { open: 0, close: 0 } }, | |
prices: { 'Adult': 49.99, | |
'Senior': 24.99, | |
'Child': 20.99 } | |
}; | |
function calculatePopulation() { | |
let count = 0; | |
for(var i = 0 ; i < data.animals.length ; i++) { | |
count += data.animals[i].residents.length | |
} | |
return count; | |
} | |
function printTimetable() { | |
let timetable = []; | |
for(let hour in data.hours) { | |
console.log(hour); | |
if(data.hours[hour].open != 0 && data.hours[hour].close != 0) { | |
timetable.push(`${hour}: from ${data.hours[hour].open} to ${data.hours[hour].close}`); | |
} else { | |
timetable.push(`${hour}: Closed`); | |
} | |
} | |
const d = timetable.pop(); | |
timetable.unshift(d); | |
return timetable.join("\n"); | |
} | |
function findEmployee(id) { | |
const result = data.employees.find(employee => employee.id === id); | |
if(result) { | |
return result.firstName + " " + result.lastName; | |
} else { | |
return "Not found"; | |
} | |
} | |
function findAnimal(id) { | |
const result = data.animals.find(animal => animal.id === id); | |
if(result) { | |
return result.name; | |
} else { | |
return "Not found"; | |
} | |
} | |
function findManagersOf(idEmployee) { | |
const employee = data.employees.find(x => x.id === idEmployee); | |
const managers = employee.managers.map(m => findEmployee(m)); | |
return managers.join("\n"); | |
} | |
function countOf(animal, sex) { | |
const foundAnimal = data.animals.find(x => x.name === animal); | |
if(!foundAnimal) { | |
return 0; | |
} | |
if(!sex) { | |
return foundAnimal.residents.length; | |
} else { | |
const filtered = foundAnimal.residents.filter(x => x.sex === sex); | |
return filtered.length; | |
} | |
} | |
function countBySex(sex) { | |
let count = 0; | |
const foundAnimal = data.animals.forEach(animal => { | |
const filtered = animal.residents.filter(s => s.sex === sex); | |
count += filtered.length; | |
}); | |
return count; | |
} | |
function responsibleFor(employeeId) { | |
const employee = data.employees.find(e => e.id === employeeId); | |
const responsibilities = employee.responsibleFor.map( a => findAnimal(a) ); | |
return `${employee.firstName} ${employee.lastName}: ${responsibilities.join(',')}`; | |
} | |
function listResponsibilities() { | |
const employees = data.employees.map(emp => responsibleFor(emp.id)); | |
return employees.join("\n"); | |
} | |
function calculatePrice(adults, children = 0, seniors = 0) { | |
let calc = 0; | |
calc += data.prices.Adult * adults; | |
calc += data.prices.Child * children; | |
calc += data.prices.Senior * seniors; | |
return calc; | |
} | |
function printAnimalLocation() { | |
const locations = { | |
"NW": [], | |
"NE": [], | |
"SW": [], | |
"SE": [], | |
} | |
data.animals.forEach(animal => { | |
locations[animal.location].push(animal.name); | |
}) | |
console.log(locations); | |
var textos = []; | |
for(var location in locations) { | |
textos.push(`${location}: ${locations[location].join(',')}`) | |
} | |
return textos.join("\n"); | |
} | |
printAnimalLocation(); | |
//calculatePrice(2); | |
// listResponsibilities() | |
//responsibleFor('c5b83cb3-a451-49e2-ac45-ff3f54fbe7e1'); | |
//countBySex('male'); | |
// countOf('giraffes', 'female') | |
//findManagersOf("c5b83cb3-a451-49e2-ac45-ff3f54fbe7e1"); | |
//findEmployee('b0dc644a-5335-489b-8a2c-4e086c7819a2'); | |
// printTimetable() | |
// calculatePopulation(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment