Tracks
/
Elixir
Elixir
/
Übungen
/
Weinkeller
Weinkeller

Weinkeller

Lernübung

Einführung

Keyword-Listen

Keyword-Listen sind eine Schlüssel-Wert-Datenstruktur.

[month: "April", year: 2018]

Keyword-Listen sind Listen von {key, value}-Tupeln und können auch so geschrieben werden, aber die kürzere Syntax wird häufiger verwendet.

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

Schlüssel in einer Keyword-Liste müssen Atome sein, aber die Werte können beliebig sein. Jeder Schlüssel kann mehr als einmal verwendet werden. Die Schlüssel-Wert-Paare in einer Keyword-Liste sind geordnet.

Du kannst mit Keyword-Listen genauso arbeiten wie mit Listen, oder du kannst das Keyword-Modul verwenden.

Anleitung

Du bist der Manager eines schicken Restaurants mit einem ansehnlichen Weinkeller. Viele deiner Gäste sind anspruchsvolle Weinliebhaber. Die richtige Flasche Wein für einen bestimmten Gast zu finden, ist keine leichte Aufgabe.

Als technikbegeisterter Restaurantbesitzer hast du beschlossen, die Weinauswahl zu beschleunigen, indem du eine App schreibst, mit der deine Gäste deine Weine nach ihren Vorlieben filtern können.

1. Erkläre die Weinfarben

Auf dem Startbildschirm deiner App möchtest du eine kurze Erklärung zu jeder Weinfarbe anzeigen.

Implementiere die Funktion WineCellar.explain_colors/0. Sie nimmt keine Argumente entgegen und gibt eine Keyword-Liste zurück, in der die Weinfarben die Schlüssel und die Erklärungen die Werte sind.

Farbe Erklärung
:white Ohne Maischekontakt vergoren.
:red Mit Maischekontakt vergoren, aus dunklen Trauben.
:rose Mit etwas Maischekontakt vergoren, aber nicht genug, um als Rotwein zu gelten.

2. Hole alle Weine einer bestimmten Farbe

Eine Flasche Wein wird als 3-Tupel aus Rebsorte, Jahr und Herkunftsland dargestellt. Die Weine werden nach Weinfarbe in einer Keyword-Liste gespeichert.

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

Implementiere die Funktion WineCellar.filter/3. Sie soll eine Keyword-Liste mit Weinen, ein Atom für die Farbe und eine Keyword-Liste mit Optionen entgegennehmen, wobei der Standardwert [] ist. Die Funktion soll eine Liste der Weine der angegebenen Farbe zurückgeben.

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. Hole alle Weine einer bestimmten Farbe, die in einem bestimmten Jahr abgefüllt wurden

Erweitere die Funktion WineCellar.filter/3. Wird ihr die Option :year übergeben, soll sie eine Liste der Weine der angegebenen Farbe aus dem angegebenen Jahr zurückgeben.

Verwende die bereits implementierte Funktion WineCellar.filter_by_year/2. Sie nimmt eine Liste von Weinen und ein Jahr als Argumente entgegen und gibt eine Liste der Weine aus dem angegebenen Jahr zurück.

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. Hole alle Weine einer bestimmten Farbe, die in einem bestimmten Land abgefüllt wurden

Erweitere die Funktion WineCellar.filter/3. Wird ihr die Option :country übergeben, soll sie eine Liste der Weine der angegebenen Farbe aus dem angegebenen Land zurückgeben.

Verwende die bereits implementierte Funktion WineCellar.filter_by_country/2. Sie nimmt eine Liste von Weinen und ein Land als Argumente entgegen und gibt eine Liste der Weine aus dem angegebenen Land zurück.

Stelle sicher, dass die Funktion funktioniert, wenn ihr sowohl die Option :year als auch die Option :country übergeben wird, und zwar in beliebiger Reihenfolge.

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

# => []
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elixir Exercism

Bereit, mit Weinkeller zu starten?

Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.