Een bekend caféspelletje gaat als volgt: neem een zeshoekig bierkaartje, en plaats de getallen tussen 1 en 12 op de twaalf hoek- en middelpunten van de zes zijden, zodat de som van de drie getallen op elke zijde dezelfde is.

Onderstaande figuur geeft een mogelijke oplossing met som gelijk aan 19. Er zijn namelijk heel wat verschillende oplossingen mogelijk, die niet steeds dezelfde som opleveren. De voorbeeldoplossing kan voorgesteld worden door de reeks getallen 1, 6, 12, 2, 5, 11, 3, 9, 7, 4, 8, 10. Hierbij moet het eerste getal altijd op een hoekpunt geplaatst worden en moeten de getallen in volgorde op de volgende hoek- en middelpunten uitgeschreven worden. Welk hoekpunt als startpunt wordt genomen, en of de getallen in wijzerzin dan wel tegenwijzerzin worden uitgeschreven maakt geen verschil uit. De reeks getallen 1, 7, 12, 3, 5, 9, 6, 4, 10, 2, 8, 11 stelt dan een andere oplossing voor met som gelijk aan 20.

caféspelletje

Bovendien hoeft het spelletje niet noodzakelijk met zeshoekige bierkaartjes gespeeld te worden. Elk bierkaartje met $$n$$ ($$n \geq 3$$) zijden kan gebruikt worden. De algemene omschrijving van het spelletje wordt dan: plaats de getallen tussen 1 en $$2n$$ op de $$2n$$ hoek- en middelpunten van de $$n$$ zijden, zodat de som van de drie getallen op elke zijde dezelfde is. De reeks getallen 4, 3, 5, 1, 6, 2 stelt dan een oplossing voor met driehoekige bierkaartjes, de reeks getallen 5, 2, 6, 3, 4, 8, 1, 7 is een oplossing voor vierkante bierkaartjes en 7, 8, 1, 10, 5, 2, 9, 4, 3, 6 stelt een mogelijke oplossing met vijfhoekige bierkaartjes voor.

Opgave

Schrijf een functie geldige_oplossing waarmee kan bepaald worden of een gegeven reeks getallen een geldige oplossing voorstelt van het hierboven beschreven caféspelletje. Aan deze functie moet verplicht een lijst van natuurlijke getallen als argument doorgegeven worden. Optioneel kan als tweede argument ook nog een bijkomend natuurlijk getal $$s$$ doorgegeven worden. De opgegeven lijst getallen vormt een geldige oplossing wanneer aan al de volgende voorwaarden voldaan is:

De functie moet de waarde True teruggeven indien de getallen uit de opgegeven lijst voldoen aan alle voorwaarden. Anders moet de waarde False teruggegeven worden.

Voorbeeld

>>> geldige_oplossing([1, 6, 12, 2, 5, 11, 3, 9, 7, 4, 8, 10])
True
>>> geldige_oplossing([1, 6, 12, 2, 5, 11, 3, 9, 7, 4, 8, 10], zijde=19)
True
>>> geldige_oplossing([1, 6, 12, 2, 5, 11, 3, 9, 7, 4, 8, 10], zijde=20)
False
>>> geldige_oplossing([1, 7, 12, 3, 5, 9, 6, 4, 10, 2, 8, 11], zijde=20)
True
>>> geldige_oplossing([4, 3, 5, 1, 6, 2])
True
>>> geldige_oplossing([5, 2, 6, 3, 4, 8, 1, 7], 13)
True
>>> geldige_oplossing([7, 8, 1, 10, 5, 2, 9, 4, 3, 6], 16)
True