Rutas
/
Elixir
Elixir
/
Ejercicios
/
Bodega de vinos
Bodega de vinos

Bodega de vinos

Ejercicio de aprendizaje

Introducción

Listas de palabras clave

Las listas de palabras clave son una estructura de datos de clave-valor.

[month: "April", year: 2018]

Las listas de palabras clave son listas de tuplas {key, value} y también se pueden escribir así, pero la sintaxis corta se usa mucho más.

[month: "April"] == [{:month, "April"}]
# => true

Las claves de una lista de palabras clave deben ser átomos, pero los valores pueden ser cualquier cosa. Cada clave se puede usar más de una vez. Los pares de clave-valor de una lista de palabras clave están ordenados.

Puedes trabajar con las listas de palabras clave usando los mismos enfoques que con las listas, o puedes usar el módulo Keyword.

Instrucciones

Eres el gerente de un restaurante elegante con una bodega considerable. Muchos de tus clientes son exigentes aficionados al vino. Encontrar la botella de vino adecuada para un cliente concreto no es tarea fácil.

Como propietario de un restaurante con buen dominio de la tecnología, decidiste agilizar el proceso de selección de vinos escribiendo una aplicación que permita a los clientes filtrar tus vinos según sus preferencias.

1. Explica los colores del vino

En la pantalla de bienvenida de tu aplicación, quieres mostrar una breve explicación de cada color de vino.

Implementa la función WineCellar.explain_colors/0. No recibe argumentos y devuelve una keyword list con los colores de vino como claves y las explicaciones como valores.

Color Explicación
:white Fermented without skin contact.
:red Fermented with skin contact using dark-colored grapes.
:rose Fermented with some skin contact, but not enough to qualify as a red wine.

2. Obtén todos los vinos de un color dado

Una botella de vino se representa como una tupla de 3 elementos: variedad de uva, año y país de origen. Los vinos se almacenan por color de vino en una keyword list.

[
  white: {"Chardonnay", 2015, "Italy"},
  white: {"Pinot grigio", 2017, "Germany"},
  red: {"Pinot noir", 2016, "France"},
  rose: {"Dornfelder", 2018, "Germany"}
]

Implementa la función WineCellar.filter/3. Debe recibir una keyword list de vinos, un átomo de color y una keyword list de opciones, con un valor predeterminado de []. La función debe devolver una lista de vinos de un color dado.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white
)

# => [
#      {"Chardonnay", 2015, "Italy"},
#      {"Pinot grigio", 2017, "Germany"}
#    ]

3. Obtén todos los vinos de un color dado embotellados en un año dado

Amplía la función WineCellar.filter/3. Cuando reciba una opción :year, la función debe devolver una lista de vinos de un color dado de un año dado.

Usa la función WineCellar.filter_by_year/2, ya implementada. Recibe una lista de vinos y un año como argumentos y devuelve una lista de vinos de un año dado.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015
)

# => [
#      {"Chardonnay", 2015, "Italy"}
#    ]

4. Obtén todos los vinos de un color dado embotellados en un país dado

Amplía la función WineCellar.filter/3. Cuando reciba una opción :country, la función debe devolver una lista de vinos de un color dado de un país dado.

Usa la función WineCellar.filter_by_country/2, ya implementada. Recibe una lista de vinos y un país como argumentos y devuelve una lista de vinos de un país dado.

Asegúrate de que la función funcione cuando reciba tanto la opción :year como la :country, en cualquier orden.

WineCellar.filter(
  [
    white: {"Chardonnay", 2015, "Italy"},
    white: {"Pinot grigio", 2017, "Germany"},
    red: {"Pinot noir", 2016, "France"},
    rose: {"Dornfelder", 2018, "Germany"}
  ],
  :white,
  year: 2015,
  country: "Germany"
)

# => []
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Elixir Exercism

¿Listo para empezar Bodega de vinos?

Regístrate en Exercism para aprender y dominar Elixir con 58 conceptos168 ejercicios y mentoría humana real, todo gratis.