Code Monkey home page Code Monkey logo

la-parrilla-de-rosendo's Introduction

La Parrilla de Rosendo

La parrilla de Rosendo

Nuestro amigo Rosendo inauguró su parrilla y nos pidió un sistema para administrar los platos que ofrece, sus comensales y sacar algunas estadísticas.

¡Comencemos! 😋

1. Platos

Nos piden modelar los distintos platos que ofrece la parrilla. De cada uno de ellos nos interesa conocer:

  • su peso, medido en gramos;
  • si es apto vegetariano;
  • su valoración, un número que indica qué tan bueno es el plato;
  • si es abundante, lo cual es cierto cuando su peso es mayor a 250 gramos.

Consideraremos inicialmente estos platos:

Provoleta

Cada provoleta tiene un peso diferente. Se debe informar además si tiene especias y si es completa (o sea, con jamón y morrones). La provoleta común es apta vegetariano, mientras que la completa no.

Su valoración es de 120 puntos si es especial, y de 85 en caso contrario. Decimos que una provoleta es especial cuando se cumple alguna de estas condiciones:

  • es abundante y tiene especias;
  • o es completa.

Hamburguesas de carne

Su peso es siempre de 250 gramos y lógicamente no son aptas para vegetariano. A cada hamburguesa se le configura su pan, y la valoración se calcula como 60 + valoración del pan. Los panes posibles son:

  • industrial otorga 0 puntos;
  • casero otorga 20 puntos;
  • de masa madre otorga 45 puntos.

Hamburguesas vegetarianas

Se comportan igual que las hamburguesas de carne, con tres diferencias:

  • son aptas para vegetariano;
  • para cada hamburguesa, se informa de qué legumbre está hecha (por ejemplo: "lentejas" o "garbanzos");
  • a la valoración se le suma otro plus, que se calcula como 2 * cantidad de letras del nombre de la legumbre. Por ejemplo, si es de lentejas (que tiene 8 letras) el plus será de 16.

Conviene chusmear la Wollok Doc, los strings comparten varios métodos con las colecciones. 😉

Parrillada

Para cada parrillada se indica cuántos cortes de carne trae. Para simplificar, diremos que cada corte pesa siempre 250 gramos.

El peso de la parrillada es la suma de los pesos de sus cortes. No es apto vegetariano. La valoración se calcula como:

  • 140 si tiene 6 o más cortes,
  • 100 si tiene 4 o 5 cortes,
  • 70 si tiene 3 ó menos.

Ejemplos

Conviene ponerlos en un mismo describe, ya que los usaremos luego para los comensales.

Ejemplos:

  • Provoleta de 260 gramos con especias: es abundante, tiene una valoración de 120 puntos y es apta vegetariano.
  • Provoleta de 240 gramos completa: no es abundante, tiene una valoración de 80 puntos y no es apta vegetariano.
  • Hamburguesa de carne con pan de masa madre: no es abundante, tiene una valoración de 105 puntos y no es apta vegetariano.
  • Hamburguesa de lentejas con pan de masa madre: no es abundante, tiene una valoración de 121 puntos (los 105 del ejemplo de la hamburguesa de carne + 16 por el bonus de las lentejas) y es apta vegetariano.
  • Parrillada con 4 cortes: pesa 1000 gramos, es abundante, su valoración es de 100 y no es apta vegetariano.
  • Parrillada con 2 cortes: pesa 500 gramos, es abundante, su valoración es de 70 y no es apta vegetariano.

2. Comensales

Ya tenemos los platos, ahora nos faltan los comensales. 🍴

De cada comensal nos interesa saber:

  • su peso, medido en gramos;
  • si le agrada un plato determinado (que pasaremos por parámetro), lo cual dependerá de su gusto culinario;
  • los platos que comió, una lista de todo lo que haya ingerido. Implementar un método comer(unPlato) que lo agregue a la lista;
  • y si está satisfecho, lo cual explicaremos a continuación.

Para que un comensal esté satisfecho, se tiene que cumplir que el peso de los platos ingeridos sea mayor o igual al 1% de su propio peso y además una condición que define cada comensal (para que quede claro: se tienen que cumplir ambas condiciones).

Consideraremos los siguientes tipos de comensales:

Vegetarianos

Les agradan los platos que son apto vegetariano y tienen una valoración mayor o igual a 85. La condición adicional para estar satisfechos es que ninguno de los platos ingeridos sea abundante.

Hambre popular

Simplemente les agradan los platos abundantes. No tienen ninguna condición adicional para estar satisfechos.

De paladar fino

Les agradan los platos que pesan entre 150 y 300 gramos, y además tienen una valoración mayor a 100. La condición adicional para satisfacerse es que la cantidad de platos ingeridos sea par.

Ejemplos

A partir de los ejemplos de comidas que ya definimos, agregamos a las siguientes personas:

  • Matías, vegetariano, pesa 75000 gramos. Le agrada la provoleta de 260 gramos con especias, no le agrada la provoleta de 240 gramos completa ni la hamburguesa de carne. Si le damos tres hamburguesas vegetarianas estará satisfecho, pero si le agregamos la provoleta de 260 gramos con especias ya no (porque es abundante).
  • Marta, de hambre popular, pesa 90000 gramos. Le agradan las dos parrilladas, no le agrada ninguna de las dos hamburguesas. Si le damos la parrillada de 4 cortes estará satisfecha.
  • Leopoldo, de paladar fino, pesa 50000 gramos. Le agrada la provoleta de 260 gramos con especias y las dos hamburguesas, no le agrada ninguna de las dos parrilladas ni la otra provoleta. Si le damos la provoleta que le gusta y una de las hamburguesas, estará satisfecho, pero si le agregamos la otra hamburguesa ya no (porque la cantidad de platos se vuelve impar).

3. Cocina

Agregar al modelo la cocina, que tiene todos los platos que la parrilla tiene preparados.

Se quiere poder consultar:

  • si tiene buena oferta vegetariana: esto es así si la diferencia entre platos vegetarianos y no vegetarianos es de a lo sumo 2. Por ejemplo: si hay 10 carnívoros y 8 vegetarianos sí tiene buena oferta, pero si hay 11 carnívoros no (porque la diferencia es mayor a 2).
  • el plato fuerte carnívoro: el de mejor valoración entre los no apto vegetariano;
  • dado un comensal, la lista de platos que le gustan;
  • dados dos comensales, saber si son polos opuestos, lo cual es cierto si ningún plato que hay en la cocina les gusta a los dos.

También se pide poder servir un plato para un comensal - cualquier plato que le guste de los que hay en la cocina. Si no le gusta ningún plato, lanzar un error. Si el plato existe, sacarlo de la cocina y hacer que el comensal lo coma.

Ojo 👀: este método debe modificar al comensal y a la cocina. Para los tests, puede convenir crear un método auxiliar que solo devuelva el plato elegido y luego usar este método en el principal.

4. Criterios de selección de comida

Extender el sistema por el cual un comensal elige una comida de la cocina. Sigue manteniendose que debe ser una comida que le guste, pero en vez de elegir cualquiera se utilizan los siguientes criterios:

  • Los vegetarianos eligen, entre las que les gustan, la primera que no sea abundante.
  • Los hambrientos populares eligen, entre las que les gustan, la más pesada.
  • Los de paladar fino eligen, entre las que les gustan, la que más se parezca a la ultima que comieron. Para simplificar, solo consideraremos si es vegetariana o no: si la ultima fue vegetariana, entonces eligen una vegetariana y viceversa. Si es la primera vez que van a la parrilla, eligen cualquiera.

Conviene primero hacer un método en el comensal que reciba una lista de platos que le gustan y devuelva el plato elegido, y luego utilizar ese método en la cocina.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.