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.
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.
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:
het aantal getallen $$n$$ in de opgegeven lijst moet even zijn en groter of gelijk aan zes
elk van de getallen tussen 1 en $$n$$ moet juist één keer in de lijst voorkomen
de som van elke drie getallen op eenzelfde zijde moet gelijk zijn
indien een waarde $$s$$ werd doorgegeven voor de optionele parameter, dan moet de som van de drie getallen op elke zijde gelijk zijn aan $$s$$
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.
>>> 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