====== Cyber-Dojo : Apprendre à tester (et coder) en s'amusant ! ======
Objectifs = appréhender les tests par le jeu
Les temps sont donnés comme des indications, ils ne sont pas une contrainte! La seule contrainte est de réussir à coder le défi qui vous est lancé dans les 2heures !
===== 3mn Organisation =====
Vous formez des groupes de 2 ou 3 étudiants.
Une seule machine connectée à la session, cf. suite.
===== 7mn Connexion et lancement de la session =====
- Connectez vous à [[http://cyber-dojo.org/]]
- **"Enter a practice Session :"** le numéro vous est donné en TD.
- **Start Coding**
- **Test**
- Corriger et **Test**
- Amusez vous ainsi et voyez que vous pouvez revenir en arrière en sélectionnant un des ronds en haut de la page {{ :2016_2017:s3:concprogobjet:td:versions-codingdojo_2016-10-16_a_09.01.04.png?direct&300 |}}
- Ok c'est parti. Vous avez compris le principe, maintenant c'est à vous !
**Plus :** L'IDE est extrêmement simple : test=sauvegarder les codes, gestion de version, exécution automatique, etc. Sur le dashboard, on peut voir l'avancé de tous les groupes.
**Défaut :** L'IDE est extrêmement simple : pas d’auto completion, pas d’import, erreur debuggable par console java (pas d’aide de l’IDE)....
===== 15mn Compréhension et premiers pas =====
Lisez tout ce passage avant de commencer !
- Regardez les instructions, sur le site directement (**Instructions**), un rappel de l'énoncé est "recopié" ci-dessous.
- Discutez en équipe (paire ou triplet) pour imaginer une solution.
- Copiez--collez le test //HikerTest.java// qui est donné en exemple. Renommez le en “BookShopTest.java”.
- Attention aux imports static ! Ne pas les enlever !!.
- Instructions :
* **API : classe : BookShop**, méthode : double cost(int[] order)
* exemple de test
BookShop b = new BookShop();
@Test
public void costForTwoDifferentBooks() throws Exception {
int [] order = new int[]{0,1,1,0,0};
assertEquals( 15.2 , b.cost(order), 0.001);
}
* Tuyaux ((mais vous êtes autonomes, à vous de vous organiser)) :
* Choisissez la manière de représenter une commande (3 livres du 1e titre, 2 livres du 2e, aucun du 3e, 4e et 5e). Le test qui vous est donné peut vous y aider.
* Pensez "INCREMENTAL" et tests : vous faîtes passer les premiers tests (par exemple, je sais calculer le coût d'une commande qui contient un livre) et vous avancez avec des tests plus difficiles qui ne passent pas forcément, mais vous pouvez pas à pas en construire d'autres qui passent. A tout moment, i) vous avez une version avec des tests qui passent (par retour en arrière à une version précédente), ii) vous pouvez tenter de nouveaux codes si la structure première ne passe pas.
* Rappelez-vous : faites vous de petites méthodes, avec des noms qui veulent dire ce qu'elles font...cela vous aidera..
===== Développements en "paire" =====
Top.... Dans l'équipe, un seul étudiant a le "clavier" les autres sont là pour l'aider le guider. Vous changez celui qui saisit régulièrement pour vous donner une opportunité d'être dans les 2 situations.
===== Livraison =====
Avant la fin :
Puis vous nous envoyez le .tgz obtenu par download
===== Temps restant =====
Vous amorcez le TD suivant
To try and encourage more sales of the 5 different Harry
Potter books they sell, a bookshop has decided to offer
discounts of multiple-book purchases.
One copy of any of the five books costs 8 EUR.
If, however, you buy two different books, you get a 5%
discount on those two books.
If you buy 3 different books, you get a 10% discount.
If you buy 4 different books, you get a 20% discount.
If you go the whole hog, and buy all 5, you get a huge 25%
discount.
Note that if you buy, say, four books, of which 3 are
different titles, you get a 10% discount on the 3 that
form part of a set, but the fourth book still costs 8 EUR.
Your mission is to write a piece of code to calculate the
price of any conceivable shopping basket (containing only
Harry Potter books), giving as big a discount as possible.
For example, how much does this basket of books cost?
2 copies of the first book
2 copies of the second book
2 copies of the third book
1 copy of the fourth book
1 copy of the fifth book
One way of group these 8 books is:
1 group of 5 --> 25% discount (1st,2nd,3rd,4th,5th)
+1 group of 3 --> 10% discount (1st,2nd,3rd)
This would give a total of
5 books at a 25% discount
+3 books at a 10% discount
Giving
5 x (8 - 2.00) == 5 x 6.00 == 30.00
+3 x (8 - 0.80) == 3 x 7.20 == 21.60
For a total of 51.60
However, a different way to group these 8 books is:
1 group of 4 books --> 20% discount (1st,2nd,3rd,4th)
+1 group of 4 books --> 20% discount (1st,2nd,3rd,5th)
This would give a total of
4 books at a 20% discount
+4 books at a 20% discount
Giving
4 x (8-1.60) == 4 x 6.40 == 25.60
+4 x (8-1.60) == 4 x 6.40 == 25.60
For a total of 51.20
And 51.20 is the price with the biggest discount.