const inventors = [
  {first: "Albert", last: "Einstein", year: 1879, passed: 1955},
  {first: "Isaac", last: "Newton", year: 1643, passed: 1727},
  {first: "Galileo", last: "Galilei", year: 1564, passed: 1642},
  {first: "Marie", last: "Curie", year: 1867, passed: 1934},
  {first: "Johannes", last: "Kepler", year: 1571, passed: 1630},
  {first: "Nicolaus", last: "Copernicus", year: 1473, passed: 1543},
  {first: "Max", last: "Planck", year: 1858, passed: 1947},
  {first: "Katherine", last: "Blodgett", year: 1898, passed: 1979},
  {first: "Ada", last: "Lovelace", year: 1815, passed: 1852},
  {first: "Sarah E.", last: "Goode", year: 1855, passed: 1905},
  {first: "Lise", last: "Meitner", year: 1878, passed: 1968},
  {first: "Hanna", last: "Hammarström", year: 1829, passed: 1909}
];

const people = [
  "Beck, Glenn",
  "Becker, Carl",
  "Beckett, Samuel",
  "Beddoes, Mick",
  "Beecher, Henry",
  "Beethoven, Ludwig",
  "Begin, Menachem",
  "Belloc, Hilaire",
  "Bellow, Saul",
  "Benchley, Robert",
  "Benenson, Peter",
  "Ben-Gurion, David",
  "Benjamin, Walter",
  "Benn, Tony",
  "Bennington, Chester",
  "Benson, Leana",
  "Bent, Silas",
  "Bentsen, Lloyd",
  "Berger, Ric",
  "Bergman, Ingmar",
  "Berio, Luciano",
  "Berle, Milton",
  "Berlin, Irving",
  "Berne, Eric",
  "Bernhard, Sandra",
  "Berra, Yogi",
  "Berry, Halle",
  "Berry, Wendell",
  "Bethea, Erin",
  "Bevan, Aneurin",
  "Bevel, Ken",
  "Biden, Joseph",
  "Bierce, Ambrose",
  "Biko, Steve",
  "Billings, Josh",
  "Biondo, Frank",
  "Birrell, Augustine",
  "Black, Elk",
  "Blair, Robert",
  "Blair, Tony",
  "Blake, William"
];

// Array.prototype.filter()
// 1. Filter the list of inventors for those who were born in the 1500s.
const inventors1500s = inventors.filter(inventor => inventor.year >= 1500 && inventor.year < 1600);
console.table(inventors1500s);

// Array.prototype.map()
// 2. Give us an array of the inventors' first and last names.
const inventorNames = inventors.map(inventor => `${inventor.first} ${inventor.last}`);
console.table(inventorNames);

// Array.prototype.sort()
// 3. Sort the inventors by birth date, oldest to youngest.
const inventorsByBirthDate = inventors.sort((a, b) => a.year > b.year ? 1 : -1);
console.table(inventorsByBirthDate);

// Array.prototype.reduce()
// 4. How many years did all the inventors live?
const inventorYearsLived = inventors.reduce((total, inventor) => {
  return total + inventor.passed - inventor.year;
}, 0);
console.log(inventorYearsLived);

// 5. Sort the inventors by years lived, from greatest to least.
const inventorsByLifespan = inventors.sort((a, b) => a.passed - a.year > b.passed - b.year ? -1 : 1);
console.table(inventorsByLifespan);

// 6. Create a list of boulevards in Paris that contain "de" anywhere in the name.
// https://en.wikipedia.org/wiki/Category:Boulevards_in_Paris
console.log(
  `category = document.querySelector(".mw-category");
  <div class=​"mw-category">​…​</div>​
  links = [...category.querySelectorAll("a")];
  (37) [a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a]
  de = links.map(link => link.textContent).filter(name => name.includes("de"));
  (12) ["Boulevard de l'Amiral-Bruix", "Boulevard des Capucines", "Boulevard de la Chapelle", "Boulevard de Clichy", "Boulevard de l'Hôpital", "Boulevard des Italiens", "Boulevard de la Madeleine", "Boulevard de Magenta", "Boulevard de Rochechouart", "Boulevard de Sébastopol", "Boulevard de Strasbourg", "Boulevard de la Zone"]`
);

// 7. Sort Exercise
// Sort the people alphabetically by last name.
const alphabeticalPeople = people.sort((a, b) => {
  const [aLast, aFirst] = a.split(", ");
  const [bLast, bFirst] = b.split(", ");
  return aLast > bLast ? 1 : -1;
});
console.table(alphabeticalPeople);

// 8. Reduce Exercise
// Sum up the instances of each of these:
const data = ["car", "car", "truck", "truck", "bike", "walk", "car", "van", "bike", "walk", "car", "van", "car", "truck"];
const transportationMethods = data.reduce((obj, method) => {
  if (!obj[method]) {
    obj[method] = 0;
  }
  obj[method]++;
  return obj;
}, {});
console.log(transportationMethods);
