diff --git a/eferro/README.md b/eferro/README.md deleted file mode 100644 index b67831b..0000000 --- a/eferro/README.md +++ /dev/null @@ -1,22 +0,0 @@ -https://github.com/eferro/kata_harrypotter - -Harry Potter es una colección de 7 novelas fantásticas escrita por la autora británica J. K. Rowling, en la que se describen las aventuras del joven aprendiz de mago Harry Potter y sus amigos. Nuestra librería ha decidido poner en venta los libros con una oferta especial. - -Cada libro cuesta PRECIO_UNITARIO€ -Si compras 2 libros diferentes tienes un 5% de descuento -si compras 3 libros diferentes tienes un 10% de descuento -si compras 4 libros diferentes tienes un 15% de descuento -si compras 5 libros diferentes tienes un 20% de descuento -si compras 6 libros diferentes tienes un 30% de descuento -si compras toda la colección tienes un 45% de descuento - -Tras la locura desatada por semejante oferta, la librería se está llenando de adolescentes alocados comprando libros en grandes cantidades y las cajeras no dan a basto porque pierden mucho tiempo realizando cálculos. - -Por lo tanto tu objetivo es crear un módulo de código fuente que pueda aportar la solución a este problema y devuelva el precio de compra para cada combinación que haga cualquier cliente. - -Se proponen algunos ejemplos prácticos para entender los diferentes casos: -comprando 2 copias del primer libro el precio es PRECIO_UNITARIO€ por unidad: PRECIO_UNITARIO * 2 = 16 -comprando 3 copias del primer libro y una del segundo: (PRECIO_UNITARIO€ * 2librosdiferentes * 0.95descuento) + (PRECIO_UNITARIO€ * 2libros_iguales) -Comprando 5 copias de toda la colección: (PRECIO_UNITARIO€ * 7librosdiferentes * 0.55descuento) * 5_copias - -Basada en la kata Potter: http://codingdojo.org/cgi-bin/wiki.pl?KataPotter \ No newline at end of file diff --git a/eferro/specs/foo_spec.py b/eferro/specs/foo_spec.py deleted file mode 100644 index 5db9dec..0000000 --- a/eferro/specs/foo_spec.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- - -from expects import * -from hamcrest import * -from doublex import * - -from collections import Counter - -PRECIO_UNITARIO = 8 -LIBRO1 = 'libro1' -LIBRO2 = 'libro2' -LIBRO3 = 'libro3' - -def precioLibros(libros): - contadores = Counter(libros) - distintos = len(contadores.keys()) - repetidos = len(libros)-distintos - - if distintos == 2: - return PRECIO_UNITARIO * 2 * 0.95 + PRECIO_UNITARIO * repetidos - if distintos == 3: - return PRECIO_UNITARIO * 3 * 0.90 + PRECIO_UNITARIO * repetidos - - - return PRECIO_UNITARIO * len(libros) - - -with context('Harry Potter Kata'): - - with describe('comprando de uno en uno'): - with it('el primero cuesta PRECIO_UNITARIO'): - expect(precioLibros([LIBRO1])).to(equal(PRECIO_UNITARIO)) - with it('el segundo cuesta PRECIO_UNITARIO'): - expect(precioLibros([LIBRO2])).to(equal(PRECIO_UNITARIO)) - - with describe('comprando dos'): - with it('dos copias del mismo cuestan 16'): - expect(precioLibros([LIBRO1, LIBRO1])).to(equal(2 * PRECIO_UNITARIO)) - expect(precioLibros([LIBRO2, LIBRO2])).to(equal(2 * PRECIO_UNITARIO)) - - with it('dos copias distintas tienen un descuento de 5'): - expect(precioLibros([LIBRO1, LIBRO2])).to(equal(16*0.95)) - expect(precioLibros([LIBRO2, LIBRO1])).to(equal(16*0.95)) - - with describe('comprando tres'): - with it('tres iguales cuestan 24'): - expect(precioLibros([LIBRO1, LIBRO1, LIBRO1])).to(equal(24)) - - with it('de los tres, solo dos distintos'): - expect(precioLibros([LIBRO1, LIBRO1, LIBRO2])).to(equal(16*0.95 + PRECIO_UNITARIO)) - - with it('los tres distintos'): - expect(precioLibros([LIBRO1, LIBRO2, LIBRO3])).to(equal(PRECIO_UNITARIO * 3*0.90)) - - with describe('comprando cuatro'): - with it('tres iguales cuestan 32'): - expect(precioLibros([LIBRO1, LIBRO1, LIBRO1, LIBRO1])).to(equal(32)) \ No newline at end of file diff --git a/eferro/specs/harry_potter_kata_spec.py b/eferro/specs/harry_potter_kata_spec.py new file mode 100644 index 0000000..9ed8e4c --- /dev/null +++ b/eferro/specs/harry_potter_kata_spec.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- + +from expects import * +from hamcrest import * +from doublex import * + +from collections import Counter + +UNIT_PRICE = 8 +BOOK1 = 'book1' +BOOK2 = 'book2' +BOOK3 = 'book3' + +def books_price(books): + discounts = { + 2: 0.95, + 3: 0.90, + } + book_counter = Counter(books) + differents = len(book_counter.keys()) + repeated = len(books)-differents + + return differents * discounts.get(differents, 1) * UNIT_PRICE + repeated * UNIT_PRICE + +with context('Harry Potter Kata'): + + with describe('buying one by one'): + with it('the cost of the first is UNIT_PRICE'): + expect(books_price([BOOK1])).to(equal(UNIT_PRICE)) + with it('the cost of the second is UNIT_PRICE'): + expect(books_price([BOOK2])).to(equal(UNIT_PRICE)) + + with describe('buying two'): + with it('the cost of two copys of the same book is twice the unit price'): + expect(books_price([BOOK1, BOOK1])).to(equal(16)) + expect(books_price([BOOK2, BOOK2])).to(equal(16)) + + with it('the cost of two different books has a 5percent discount'): + expect(books_price([BOOK1, BOOK2])).to(equal(16*0.95)) + expect(books_price([BOOK2, BOOK1])).to(equal(16*0.95)) + + with describe('buying three books'): + with it('the cost of three copies is 24'): + expect(books_price([BOOK1, BOOK1, BOOK1])).to(equal(24)) + + with describe('when two book are different'): + with it('the cost is 23.5 (two books with 5percent discount)'): + expect(books_price([BOOK1, BOOK1, BOOK2])).to(equal(16*0.95 + UNIT_PRICE)) + with describe('when all are differents'): + with it('the cost is 21.6 (three books with 10percent discount)'): + expect(books_price([BOOK1, BOOK2, BOOK3])).to(equal(UNIT_PRICE * 3*0.90)) + + with describe('buing four books'): + with it('the cost of four copies is 32'): + expect(books_price([BOOK1, BOOK1, BOOK1, BOOK1])).to(equal(32)) \ No newline at end of file