PROG0304 - Immune system

The immune system protects organisms from infection with layered defenses of increasing specificity. In simple terms, physical barriers prevent pathogens such as bacteria and viruses from entering the organism. If a pathogen breaches these barriers, the innate immune system provides an immediate, but non-specific response. Innate immune systems are found in all plants and animals. If pathogens successfully evade the innate response, vertebrates possess a second layer of protection, the adaptive immune system, which is activated by the innate response. Here, the immune system adapts its response during an infection to improve its recognition of the pathogen. This improved response is then retained after the pathogen has been eliminated, in the form of an immunological memory, and allows the adaptive immune system to mount faster and stronger attacks each time this pathogen is encountered.

immuunsysteem
A scanning electron microscope image of a single neutrophil (yellow), engulfing anthrax bacteria (Bacillus anthracis; orange).

Assignment

Define a class Organism that can be used to represent organisms that have a simplified model of an immune system. This immune system has both innate and adaptive properties that protect the organism against viruses — other kinds of pathogens are ignored in this exercise for the sake of simplicity. A certain type of virus is represented in this model as an integer. The innate component of the immune system protects the organism against a given series of virus types. In addition, over time the adaptive component of the immune system can make the organism resistant for other virus types. The latter happens if sufficient antibodies for a particular virus type have been formed. When a certain type of virus mutates, the organism looses its resistance (both innate and adaptive) against the old form of the virus, and if necessary, should start making new antibodies against the new form of the virus. The class Organism must support at least the following methods:

  • An initialization method that can be used to create a new organism that initially has no antibodies in its adaptive component of the immune system. The method has an optional parameter to which the location of a text file can be passed. This text file contains the list of viruses (a list of integers, each on a separate line) the organism is protected against by its innate immune system. If no text file is passed during the initialization of a new organism, then the immune system of the organism has no innate component.
  • A method isResistant that takes a virus (an integer) as an argument for the parameter virus. This method must return a Boolean value that indicates whether or not the organism is resistant against the given virus type. The organism is resistant if it is protected against the virus by its innate immune system, or else the adaptive component of the immune system comes into play. In the latter case, the adaptive immune system first creates a new antibody against the virus type for which resistance is tested. The adaptive component of the immune system then only protects the organism against a virus type if it has at least three antibodies for that virus.
  • A method mutation that takes a virus (an integer) as an argument for the parameter virus. If this method is called, the immune system of the organism looses any form of resistance (both innate and adaptive) against (the old form of) the virus. Later on, the organism can become resistant against (the new form of) the virus if it has created a sufficient amount of new antibodies (by calling the method isResistant).

Example

In the following interactive session we assume that the text file immune_system.txt is located in the current directory. This file has five lines containing the integers 1, 2, 3, 4 and 5.

>>> organism = Organism('immune_system.txt')
>>> organism.isResistant(1)
True
>>> organism.isResistant(88)
False
>>> organism.isResistant(virus=99)
False
>>> organism.isResistant(2)
True
>>> organism.isResistant(virus=99)
False
>>> organism.isResistant(virus=99)
True
>>> organism.isResistant(virus=99)
True
>>> organism.mutation(virus=1)
>>> organism.isResistant(virus=1)
False
>>> organism.isResistant(virus=1)
False
>>> organism.isResistant(virus=1)
True
>>> organism.mutation(virus=99)
>>> organism.isResistant(virus=99)
False
>>> organism.isResistant(virus=99)
False
>>> organism.isResistant(virus=99)
True

Het immuunsysteem is het geheel aan verdedigingsmechanismen waarmee organismen indringers kunnen bestrijden. Naast de bescherming tegen virussen, bacteriën en parasieten, wordt het immuunsysteem ook ingezet om afvalstoffen of zieke lichaamscellen (zoals kankercellen) op te ruimen. Het immuunsysteem kan onderverdeeld worden in een aspecifiek (aangeboren) en een adaptief (verworven) gedeelte. Het aspecifieke deel is snel werkzaam, maar minder specifiek voor de ziekteverwekker (pathogeen). Daarentegen past het adaptieve deel zich aan aan een bepaalde pathogeen. Dat kost tijd, maar resulteert uiteindelijk in een sterkere afweer. Bovendien is het lichaam daarna vaak langdurig beschermd tegen die specifieke ziekteverwekker.

immuunsysteem
Microscopische opname van een neutrofiele granulocyt (geel) die een miltvuurbacterie (Bacillus anthracis; oranje) opslokt.

Opgave

Definieer een klasse Organisme waarmee organismen kunnen voorgesteld worden die beschikken over een vereenvoudigd model van een immuunsysteem. Dit immuunsysteem heeft zowel aspecifieke als adaptieve eigenschappen die het organisme beschermen tegen virussen — andere vormen van pathogenen worden omwille van de eenvoud achterwege gelaten. Een bepaald type virus wordt in dit model voorgesteld door een geheel getal. Het aspecifieke deel van het immuunsysteem beschermt het organisme tegen een aantal opgegeven types van virussen. Daarnaast kan het adaptieve gedeelte van het immuunsysteem er ook voor zorgen dat het organisme resistent wordt voor bijkomende virussen. Dat laatste gebeurt wanneer er zich een aantal antilichamen tegen het virus gevormd hebben. Wanneer een bepaald type virus muteert, dan verliest het organisme zijn resistentie (zowel aspecifiek als adaptief) tegen de oude vorm van het virus, en moet het indien nodig terug adaptief antilichamen tegen de nieuwe vorm van het virus aanmaken. De klasse Organisme moet hiervoor ondersteuning bieden aan de volgende methoden:

  • Een initialisatiemethode die ervoor zorgt dat een nieuw aangemaakt organisme initieel nog geen antilichamen heeft in het adaptieve gedeelte van het immuunsysteem. Aan deze methode kan optioneel de locatie van een tekstbestand doorgegeven worden. Dit tekstbestand bevat de lijst van virussen (een lijst van gehele getallen, elk op een afzonderlijke regel) waartegen het aspecifieke deel van het immuunsysteem het organisme beschermt. Indien er bij het aanmaken van een organisme geen bestandsnaam wordt doorgegeven, dan heeft het immuunsysteem van het organisme dus ook geen aspecifiek deel.
  • Een methode isResistent waaraan een virus (een geheel getal) als argument voor de parameter virus kan doorgegeven worden. Deze methode moet een Booleaanse waarde teruggeven die aangeeft of het organisme al dan niet resistent is tegen het opgegeven virus. Indien het aspecifieke deel van het immuunsysteem bescherming biedt tegen het virus dan treedt er resistentie op, anders wordt het adaptieve deel van het immuunsysteem aangesproken. In dat laatste geval wordt er in de eerste plaats een bijkomend antilichaam aangemaakt tegen het virus waarvan de resistentie getest wordt. Er treedt pas resistentie op wanneer het immuunsysteem minstens drie specifieke antilichamen heeft aangemaakt voor het opgegeven virus.
  • Een methode mutatie waaraan een virus (een geheel getal) als argument voor de parameter virus kan doorgeven worden. Wanneer deze methode wordt aangeroepen, verliest het immuunsysteem elke vorm van resistentie (zowel aspecifiek als adaptief) tegen (de oude vorm van) het virus. Later kan er terug resistentie optreden tegen (die nieuwe vorm van) het virus, indien het adaptieve gedeelte terug voldoende antilichamen heeft aangemaakt (door het aanroepen van de methode isResistent).

Voorbeeld

In onderstaande sessie gaan we ervan uit dat het tekstbestand immuunsysteem.txt zich in de huidige directory bevindt. Dit bestand bevat vijf regels met daarop de getallen 1, 2, 3, 4 en 5.

>>> organisme = Organisme('immuunsysteem.txt')
>>> organisme.isResistent(1)
True
>>> organisme.isResistent(88)
False
>>> organisme.isResistent(virus=99)
False
>>> organisme.isResistent(2)
True
>>> organisme.isResistent(virus=99)
False
>>> organisme.isResistent(virus=99)
True
>>> organisme.isResistent(virus=99)
True
>>> organisme.mutatie(1)
>>> organisme.isResistent(1)
False
>>> organisme.isResistent(1)
False
>>> organisme.isResistent(1)
True
>>> organisme.mutatie(virus=99)
>>> organisme.isResistent(virus=99)
False
>>> organisme.isResistent(virus=99)
False
>>> organisme.isResistent(virus=99)
True

Added by:Peter Dawyndt
Date:2013-01-02
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.