Borospince

Borospince

Tanulófeladat

Bevezetés

Kulcsszólisták

A kulcsszólisták kulcs-érték adatszerkezetek.

[month: "April", year: 2018]

A kulcsszólisták {key, value} tuple-ok listái, és ilyen formában is leírhatók, de a rövidebb szintaxist szélesebb körben használják.

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

A kulcsszólistában a kulcsoknak atomoknak kell lenniük, de az értékek bármik lehetnek. Egy kulcs többször is használható. A kulcs-érték párok a kulcsszólistában sorrendben vannak.

A kulcsszólistákkal ugyanazokkal a megközelítésekkel dolgozhatsz, mint a listákkal, vagy használhatod a Keyword modult.

Utasítások

Egy elegáns étterem menedzsere vagy, amelynek tekintélyes borospincéje van. A vendégeid közül sokan igényes borrajongók. Nem könnyű feladat megtalálni a megfelelő palack bort egy adott vendég számára.

Technikához értő étteremtulajdonosként úgy döntöttél, hogy felgyorsítod a borválasztás folyamatát: írsz egy alkalmazást, amellyel a vendégek a saját preferenciáik szerint szűrhetik a boraidat.

1. Magyarázd el a borszíneket

Az alkalmazás üdvözlőképernyőjén az egyes borszínek rövid magyarázatát szeretnéd megjeleníteni.

Valósítsd meg a WineCellar.explain_colors/0 függvényt. Nem vár argumentumot, és egy kulcsszólistát ad vissza: a kulcsok a borszínek, az értékek pedig a magyarázatok.

Szín Magyarázat
: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. Kérdezd le az adott szín összes borát

Egy palack bort egy háromelemű tuple képvisel: szőlőfajta, évjárat és származási ország. A borokat borszínenként, kulcsszólistában tároljuk.

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

Valósítsd meg a WineCellar.filter/3 függvényt. Bemenetként egy borokból álló kulcsszólistát, egy színatomot és egy opciókat tartalmazó kulcsszólistát kap, amelynek alapértéke []. A függvény egy adott színű borokból álló listát adjon vissza.

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. Kérdezd le az adott színű, adott évben palackozott borokat

Bővítsd a WineCellar.filter/3 függvényt. Ha megkapja a :year opciót, a függvény egy adott szín adott évjáratú borainak listáját adja vissza.

Használd a már megvalósított WineCellar.filter_by_year/2 függvényt. Argumentumként egy borokból álló listát és egy évjáratot kap, és egy adott évjárat borainak listáját adja vissza.

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. Kérdezd le az adott színű, adott országban palackozott borokat

Bővítsd a WineCellar.filter/3 függvényt. Ha megkapja a :country opciót, a függvény egy adott szín adott országból származó borainak listáját adja vissza.

Használd a már megvalósított WineCellar.filter_by_country/2 függvényt. Argumentumként egy borokból álló listát és egy országot kap, és egy adott országból származó borok listáját adja vissza.

Ügyelj rá, hogy a függvény akkor is működjön, ha egyszerre kapja a :year és a :country opciót, bármilyen sorrendben.

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

# => []
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Borospince feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elixir nyelvet 58 fogalom168 feladat segítségével, valódi emberi mentorálással, mindez ingyen.