Tijdens de winter van 2011 had Nieuw-Zeeland te kampen met een gebrek aan neerslag. Daardoor kwamen de spaarbekkens van waterkrachtcentrales zo laag te staan, dat het land werd getroffen door een ernstige energiecrisis. Het Ministerie van Energie moest dus een noodplan uitwerken, waarbij de stroom in bepaalde gebieden van het land op een systematische maar eerlijke manier kon worden uitgeschakeld.
In dit noodplan werd het land opgedeeld in $$n$$ gebieden, waarbij het gebied rond Auckland steeds het nummer 1 kreeg toegewezen, en het gebied rond Wellington steeds het nummer 13. Eerst zou de stroom worden uitgeschakeld in het gebied met nummer 1 (niemand stelde in vraag dat dit het eerlijkste startpunt was) en daarna achtereenvolgens in elk gebied $$m$$ posities verder. Hierbij is $$m$$ een willekeurig getal (met $$m > 0$$) dat de sprong genoemd wordt.
De nummering van de gebieden wordt cyclisch toegepast, door na gebied $$n$$ terug gebied 1 te laten volgen. Omwille van de eerlijkheid worden gebieden waar de stroom eerder reeds werd uitgeschakeld niet meer in rekening gebracht bij het bepalen van het gebied $$m$$ posities verder. Op die manier wordt bijvoorbeeld in het noodplan voor $$n=17$$ gebieden met sprong $$m=5$$ achtereenvolgens de stroom uitgeschakeld in de volgende gebieden:
1, 6, 11, 16, 5, 12, 2, 9, 17, 10, 4, 15, 14, 3, 8, 13, 7
Let hierbij op het feit dat bijvoorbeeld na gebied 16 de stroom wordt uitgeschakeld in gebied 5. Dit is het gebied $$m=5$$ posities verder, rekening houdend met het feit dat de stroom reeds eerder werd uitgeschakeld in gebied 1. Om het gebied vijf posities verder te bepalen, worden dus de volgende gebieden geteld:
17, 2, 3, 4, 5
Nog omwille van de eerlijkheid stelt zich nu het probleem dat men er in het noodplan ook wil voor zorgen dat de stroom het laatst wordt uitgeschakeld in Wellington. Dat is immers het gebied waarin het Ministerie van Energie gelegen is. Daarom moet voor een gegeven aantal gebieden $$n$$ de willekeurige sprong $$m$$ zorgvuldig gekozen worden, zodat gebied 13 als laatste geselecteerd wordt. Een waarde $$m$$ die hieraan voldoet wordt een geldige sprong genoemd.
Schrijf een functie noodplan waaraan twee argumenten moeten doorgegeven worden: i) een gegeven aantal gebieden (int) en ii) een gegeven sprong (int). De functie moet een lijst (list) teruggeven met de gebieden waarin de stroom achtereenvolgens zal uitgeschakeld worden volgens een noodplan voor het gegeven aantal gebieden en de gegeven sprong.
Gebruik een lokale lijstvariabele (list) om bij te houden in welke gebieden de stroom reeds werd uitgeschakeld (waarde True) en in welke gebieden de stroom nog niet werd uitgeschakeld (waarde False).
Schrijf een functie geldige_sprong waaraan een aantal gebieden (int) moet doorgegeven worden. De functie moet de kleinste geldige sprong (int) teruggeven voor een noodplan met het gegeven aantal gebieden. Als er geen geldige sprong bestaat, dan moet de functie de waarde None teruggeven.
>>> noodplan(17, 5)
[1, 6, 11, 16, 5, 12, 2, 9, 17, 10, 4, 15, 14, 3, 8, 13, 7]
>>> noodplan(16, 11)
[1, 12, 8, 5, 3, 2, 4, 7, 11, 16, 14, 15, 10, 6, 9, 13]
>>> geldige_sprong(17)
7
>>> geldige_sprong(14)