12 Sep 2014

Dojo #6

KataPotter

Enoncé

Il y a actuellement 5 tomes différents de “Harry Potter” disponibles. Chaque tome, vendu séparément coûte 8 euros.
Si un client achète deux tomes différents en même temps, il bénéficie d’une réduction de 5% sur ces deux tomes.
Si il achète trois tomes différents, la réduction est de 10% sur ces tomes.
Quatre tomes, réduction de 20 %.
Et si le client achète les 5 tomes, il bénéficie de 25% de réduction sur ces 5 tomes.

Il est possible de bénéficier de plusieurs offres de réduction pour un même achat groupé, mais chaque livre acheté ne contribue qu’à une seule réduction à la fois.
Lorsque deux combinaisons de réduction sont possibles
– par exemple, lorsque le client achète 5 tomes différents, on peut soit appliquer la réduction pour les 5 tomes, soit la réduction pour 2 tomes et la réduction pour 3 tomes.
C’est celle qui offre la plus grande réduction globale qui est retenue.

Votre mission est d’écrire le morceau de code qui calculera la prix d’un panier (peut importe le nombre de volume, identiques et / ou différents)

Cas de test

2 livres 1
2 livres 2
2 livres 3
1 livre 4
1 livre 5
Output 51.20€
Sujet disponible : https://github.com/AxaWebCenter/Dojo-6
dojo 6

Technologies

  • 6 groupes en C# / MSTest
  • 1 groupe en Javascript avec Jasmine/Karma

Points Marquants

Un kata d’un niveau un peu plus relevé que les précédents. nottament lorsque l’on pense avoir trouvé une superbe solution on se rends compte qu’il faut calculer tout un tas de cas auquel on ne s’attend pas.

Le cas de test proposé plus haut est particulièrement complexe, car il n’est pas naturel de trouver le bon résultat du premier coup. On a tendance à proposer naturellement un découpage sous la forme d’une liste de 5 livres et d’une autre de 3 livres. Hors 2 listes de 4 livres sont plus avantageuses d’un point de vue prix. Cela peut être pressenti en regardant la progression des discounts, ou il y a un gap important entre 3 et 4 et bien moindres en 4 et 5 : 5 -> 10 -> 20 -> 25. Les solutions proposées durant le kata ont été :

  • Optimisation locale pour favoriser les groupes de 4 plutôt que des groupes de 5.
  • Calculer en force brute tous les résultats possibles et retenir que le meilleur prix.

– 1h30 de réalisation – 30 min de debrief –

Share

Comments are closed.