Elves for Santa =============== Santa and his elves are really busy preparing this year's Christmas presents in the North Pole right now! In this problem, we will model Santa and the elves using an object oriented approach with three classes: ``Present``, ``Elf``, and ``Santa``. The ``Santa`` and ``Present`` classes have already been implemented, and your task will be to implement the ``Elf`` class. Before you start working on the ``Elf`` class, you should read the code in ``santa.py`` to familiarize yourself with our implementation. Study the ``Santa`` class carefully, as we will be using the ``Elf`` class exclusively within the ``Santa`` class. You should also study the ``Present`` class, since it may be helpful for the implementation of the ``Elf`` class. Your are free to design the ``Elf`` class however you like, using the existing ``Santa`` and ``Present`` classes (and their methods) if necessary. However, you are not allowed to modify or add any new methods to the ``Santa`` and ``Present`` classes, nor are you allowed to add any functions. Your work will be constrained exclusively to the ``Elf`` class. Based on what Santa needs, these are the minimal requirements for the ``Elf`` class: 1. Santa needs to be able to create a new ``Elf`` object by calling ``Elf()`` as shown in the ``gather_elves`` method, without any arguments. 2. Santa needs to be able to assign a new present for an elf to make, as shown in the ``distribute_presents_to_make`` method. This is done by calling the ``add_present`` method in the ``Elf`` class. Therefore, your implementation of the ``Elf`` class must contain this method, which takes in one argument, a present (that is, an instance of the ``Present`` class). The method does not return anything. An elf can have several presents assigned to him, but can only make one present at a time, in the same order that they were assigned to that elf (you can assume that the ``current_time`` values passed to multiple ``add_present`` calls are always in the increasing order). As soon as he is done with one present, he will move on to another immediately (if there are more presents assigned to him). Moreover, we assume that all presents take the same amount of time to make (the defined ``PRESENT_PRODUCTION_TIME``). 3. Given the current time (a float), Santa needs to be able to collect all ready presents from an elf by calling the ``remove_presents`` method in the Elf class. This method takes in one argument (the current time), and the number of presents that the elf has made. If no presents are ready, the method should return ``0``. This method should have the side effect of removing all ready presents so that they are not associated with the elf any more. Once you have implemented your ``Elf`` class, you can simulate Santa's workshop by running:: $ python3 santa.py This code generates a random number for the number of presents to send to each elf. You can set the seed for the random number generator by importing your code into ipython3 and the running the ``santa.simulate_Santa`` function. Here are some sample calls:: In [2]: import santa In [3]: santa.simulate_Santa(100, 100, seed=1234) Santa has 7237 presents ready, and 306 presents in progress! In [4]: santa.simulate_Santa(100, 100, seed=1234) Santa has 7237 presents ready, and 306 presents in progress! In [5]: santa.simulate_Santa(100, 100, seed=5678) Santa has 7630 presents ready, and 315 presents in progress! In [6]: santa.simulate_Santa(100, 100, seed=9999) Santa has 7560 presents ready, and 273 presents in progress!