Cantina

Cantina

Esercizio di apprendimento

Introduzione

Le keyword list

Le keyword list sono una struttura dati chiave-valore.

[month: "April", year: 2018]

Le keyword list sono liste di {key, value} tuple e possono essere scritte anche in quella forma, ma la sintassi più breve è quella più diffusa.

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

Le chiavi di una keyword list devono essere atomi, mentre i valori possono essere qualsiasi cosa. Ogni chiave può essere usata più di una volta. Le coppie chiave-valore di una keyword list sono ordinate.

Puoi lavorare con le keyword list usando gli stessi approcci delle liste, oppure puoi usare il modulo Keyword.

Istruzioni

Sei il manager di un ristorante elegante con una notevole cantina di vini. Molti dei tuoi clienti sono appassionati di vino esigenti. Trovare la bottiglia di vino giusta per un particolare cliente non è un compito facile.

Da proprietario di ristorante esperto di tecnologia, hai deciso di velocizzare il processo di selezione dei vini scrivendo un'app che permetta agli ospiti di filtrare i tuoi vini in base alle loro preferenze.

1. Spiegare i colori dei vini

Nella schermata di benvenuto della tua app, vuoi mostrare una breve spiegazione di ogni colore di vino.

Implementa la funzione WineCellar.explain_colors/0. Non prende argomenti e restituisce una keyword list con i colori dei vini come chiavi e le spiegazioni come valori.

Colore Spiegazione
: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. Ottenere tutti i vini di un dato colore

Una bottiglia di vino è rappresentata come una tupla di 3 elementi: varietà di uva, anno e paese di origine. I vini sono memorizzati per colore in una keyword list.

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

Implementa la funzione WineCellar.filter/3. Dovrebbe accettare una keyword list di vini, un atomo che rappresenta un colore e una keyword list di opzioni, con un valore predefinito di []. La funzione dovrebbe restituire un array di vini di un dato colore.

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. Ottenere tutti i vini di un dato colore imbottigliati in un dato anno

Estendi la funzione WineCellar.filter/3. Quando riceve un'opzione :year, la funzione dovrebbe restituire un array di vini di un dato colore di un dato anno.

Usa la funzione WineCellar.filter_by_year/2 già implementata. Prende un array di vini e un anno come argomenti e restituisce un array di vini di un dato anno.

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. Ottenere tutti i vini di un dato colore imbottigliati in un dato paese

Estendi la funzione WineCellar.filter/3. Quando riceve un'opzione :country, la funzione dovrebbe restituire un array di vini di un dato colore di un dato paese.

Usa la funzione WineCellar.filter_by_country/2 già implementata. Prende un array di vini e un paese come argomenti e restituisce un array di vini di un dato paese.

Assicurati che la funzione funzioni quando riceve sia l'opzione :year sia l'opzione :country, in qualsiasi ordine.

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"
)

# => []
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Elixir Exercism

Vuoi iniziare Cantina?

Iscriviti a Exercism per imparare e padroneggiare Elixir con 58 concetti168 esercizi e il mentoring di persone reali, tutto gratis.