Tracks
/
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} tuplas, y también se pueden escribir así, pero la sintaxis más 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 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 de vinos considerable. Muchos de tus clientes son aficionados al vino muy exigentes. Encontrar la botella de vino adecuada para un cliente en particular no es una tarea fácil.

Al frente de un restaurante y con buen conocimiento de la tecnología, decidiste agilizar el proceso de selección de vinos escribiendo una app que permita a los invitados filtrar tus vinos según sus preferencias.

1. Explica los colores del vino

En la pantalla de bienvenida de tu app, 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 lista de palabras clave 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 determinado

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 lista de palabras clave.

[
  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 lista de palabras clave de vinos, un átomo de color y una lista de palabras clave de opciones, con un valor predeterminado de []. La función debe devolver una lista de vinos de un color determinado.

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 determinado embotellados en un año determinado

Extiende la función WineCellar.filter/3. Cuando se le pasa una opción :year, la función debe devolver una lista de vinos de un color determinado de un año determinado.

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

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 determinado embotellados en un país determinado

Extiende la función WineCellar.filter/3. Cuando se le pasa una opción :country, la función debe devolver una lista de vinos de un color determinado de un país determinado.

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

Asegúrate de que la función funcione cuando se le pasan 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 una pestaña nuevas
Elixir Exercism

¿Todo 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.