//------------------------------------------------------------------------------------------------------------------
// YOUR CODE: Create your Zoo "object literal" and Animal "constructor" and "prototypes" here.
//------------------------------------------------------------------------------------------------------------------
// var zoo = {

// function animal(type, legs) {
//   this.type = type;
//   this.legs = legs;
// }

// }
var Zoo = {
  init : function(animals){
    this.animals = animals;
  },

  bipeds : function(){
    return this.animals.filter(function(animal) { return animal.legs == 2;});
  },

  quadrupeds : function(){
    return this.animals.filter(function(animal) { return animal.legs == 4;});
  }
}

function Animal(type, legs) {
  this.name = type;
  this.legs = legs;

};
  
Animal.prototype.identify = function(){
  return "I am a " + this.name + " with " + this.legs + " legs."
};
//------------------------------------------------------------------------------------------------------------------
// DRIVER CODE: Do **NOT** change anything below this point. Your task is to implement code above to make this work.
//------------------------------------------------------------------------------------------------------------------

function assert(test, message) {  
  if (!test) {
    throw "ERROR: " + message;
  }
  return true;
}

var animals = [
  new Animal("Human", 2),
  new Animal("Monkey", 2),
  new Animal("Kangaroo", 2),
  new Animal("Horse", 4),
  new Animal("Cow", 4),
  new Animal("Centipede", 100)
];

Zoo.init(animals);

assert(
  Zoo.bipeds().length === 3, "the Zoo should have 3 bipeds"
);
assert(
  Zoo.quadrupeds().length === 2, "the Zoo should have 2 bipeds"
);
assert(
  animals[0].identify() === "I am a Human with 2 legs.", "humans have 2 legs"
);
assert(
  animals[2].name === "Kangaroo", "expected 'Kangaroo'"
);
assert(
  animals[0].identify === animals[5].identify, "only one implementation of the identify() function should exist"
);