Dit is een vervolg op de vorige oefening 3+1 gratis (deel1)
Als je meer dan vier producten nodig hebt, kan je meer voordeel doen als je verschillende keren langs de kassa passeert. Je rangschikt de producten van het duurste naar het goedkoopste product, en je passeert de kassa met telkens vier producten: de eerste keer met de vier duurste producten (waarvan de goedkoopste gratis is), een tweede keer met de volgende vier duurste producten, enzoverder. Als het totaal aantal aangekochte producten geen veelvoud is van vier, dan zal je de laatste keer minder dan vier producten aankopen, en daarbij dus geen product gratis krijgen.
Schrijf twee functies, die telkens een lijst met floating point getallen als enige parameter hebben. Deze getallen stellen de prijzen van de aangekochte producten voor.
De functie groeperen geeft een lijst van tuples terug, waarbij elk tuple minimaal 1 en maximaal 4 floating point getallen bevat die gesorteerd zijn van groot naar klein. Het eerste tuple moet de prijzen van de vier duurste van de reeks aangekochte producten bevatten, het tweede tuple de volgende vier duurste producten, enzoverder. Als het aantal aangekochte producten geen veelvoud van vier is, dan moet het laatste tuple de prijzen van de resterende producten bevatten.
De functie gegroepeerd die het totaalbedrag berekent dat je zal moeten betalen als je meerdere keren langs de kassa passeert om de gegeven reeks producten in groepjes van maximaal vier producten aan te kopen, zoals omschreven in de inleiding van deze opgave. Binnenin deze functie moet je de functie groeperen gebruiken.
>>> prijzen = [3.23, 5.32, 8.23, 2.23, 9.98, 7.43, 6.43, 8.23, 4.23]
>>> groeperen(prijzen)
[(9.98, 8.23, 8.23, 7.43), (6.43, 5.32, 4.23, 3.23), (2.23,)]
>>> gegroepeerd(prijzen)
44.65