Heremietkreeften gebruiken voor hun eigen bescherming schelpen die andere dieren hebben weggegooid. Naarmate ze groeien, moeten de kreeften steeds op zoek naar grotere schelpen. Dit levert een merkwaardig verschijnsel op: als een kreeft een verlaten schelp vindt die te groot voor hem is, dan blijft hij gewoon naast die schelp wachten tot er zich andere kreeften rond de schelp beginnen te verzamelen. Hierdoor vormt zich een polonaise van ontevreden schelpbewoners. Als er uiteindelijk een "Goudlokjes"-kreeft bij de groep aansluit — een kreeft die groot genoeg is om in de verlaten schelp in te trekken — dan kan elke wachtende kreeft verhuizen naar de schelp die zijn grotere buur net heeft verlaten. Zo haalt de hele soort haar voordeel uit de samenwerking om schaarse goederen te delen.
Hetzelfde fenomeen doet zich ook voor bij mensen — wanneer één persoon een nieuw appartement, een nieuwe wagen of een nieuwe job vindt, dan laat hij een oude achter die aan een opvolger in de maatschappij wordt doorgegeven, totdat wat laatst overblijft uiteindelijk wordt weggegooid of vernietigd. In de sociologie wordt dit aangeduid met de Engelse term vacancy chain.
In deze opgave werken we met reeksen getallen die de groottes van schelpen voorstellen. Een reeks opeenvolgende gehele getallen is een reeks van $$n$$ gehele getallen $$a_1, a_2, \ldots, a_n$$ waarvoor geldt dat $$a_i + 1 = a_{i + 1} ( i = 1, \ldots, n - 1)$$. Gevraagd wordt:
Schrijf een functie opeenvolgend waaraan een reeks (een lijst of een tuple) van gehele getallen moet doorgegeven worden. De functie moet een Booleaanse waarde teruggeven, die aangeeft of de gegeven reeks een reeks opeenvolgende gehele getallen vormt als ze in oplopende volgorde gesorteerd wordt.
Schrijf een functie goudlokje waaraan een reeks (een lijst of een tuple) van gehele getallen moet doorgegeven worden. Indien met de gegeven reeks geen opeenvolgende reeks gehele getallen kan gevormd worden, maar indien dit wel kan als er juist één geheel getal aan de reeks wordt toegevoegd, dan moet dit "ontbrekend" getal door de functie als resultaat teruggegeven worden. Anders moet de functie de waarde None als resultaat teruggeven.
Schrijf een functie verhuizen1 waaraan een reeks (een lijst of een tuple) van gehele getallen moet doorgegeven worden. De functie moet een lijst teruggeven die een kopie van de gegeven reeks getallen bevat, in de gegeven volgorde. Indien met de gegeven reeks geen reeks opeenvolgende gehele getallen kan gevormd worden, maar indien dit wel kan als er juist één geheel getal aan de reeks wordt toegevoegd, dan moet achteraan de lijst die door de functie wordt teruggegeven nog dit extra "ontbrekend" getal toegevoegd worden.
Schrijf een functie verhuizen2 waaraan een lijst van gehele getallen moet doorgegeven worden. De functie mag geen waarde teruggeven (lees: de functie moet de waarde None teruggeven), maar indien met de gegeven getallen geen reeks opeenvolgende gehele getallen kan gevormd worden, maar dit wel kan als er juist één geheel getal aan de lijst wordt toegevoegd, dan moet achteraan de gegeven lijst dit extra "ontbrekend" getal toegevoegd worden.
>>> opeenvolgend([7, 5, 4, 9, 6, 3, 8])
True
>>> opeenvolgend((16, 13, 18, 17, 15, 14, 20))
False
>>> opeenvolgend((3, 4, 1, 6, 8, 7))
False
>>> goudlokje([7, 5, 4, 9, 6, 3, 8])
>>> goudlokje((16, 13, 18, 17, 15, 14, 20))
19
>>> goudlokje((3, 4, 1, 6, 8, 7))
>>> verhuizen1([7, 5, 4, 9, 6, 3, 8])
[7, 5, 4, 9, 6, 3, 8]
>>> verhuizen1((16, 13, 18, 17, 15, 14, 20))
[16, 13, 18, 17, 15, 14, 20, 19]
>>> verhuizen1((3, 4, 1, 6, 8, 7))
[3, 4, 1, 6, 8, 7]
>>> schelpen = [7, 5, 4, 9, 6, 3, 8]
>>> verhuizen2(schelpen)
>>> schelpen
[7, 5, 4, 9, 6, 3, 8]
>>> schelpen = [16, 13, 18, 17, 15, 14, 20]
>>> verhuizen2(schelpen)
>>> schelpen
[16, 13, 18, 17, 15, 14, 20, 19]
>>> schelpen = [3, 4, 1, 6, 8, 7]
>>> verhuizen2(schelpen)
>>> schelpen
[3, 4, 1, 6, 8, 7]