Kurzusok
/
Elixir
Elixir
/
Feladatok
/
Butikajánlások
Butikajánlások

Butikajánlások

Tanulófeladat

Bevezetés

Listaértelmezések

A listaértelmezések egyszerű és deklaratív módot kínálnak az Enumerable-ok átalakítására.

Egy egészen egyszerű értelmezéshez a for kulcsszót használhatjuk, amelyet egy generátor és egy do-blokk követ; ez utóbbi az enumerált értékekből állítja elő az új értékeket.

for n <- [0, 1, 2, 3], do: n + 1
# => [1, 2, 3, 4]

Az értelmezéseknek szűrői is lehetnek. Azok az értékek, amelyek nem mennek át a szűrőn, kimaradnak a végső listából:

for n <- [0, 1, 2, 3], n > 1, do: n + 1
# => [3, 4]

Bonyolultabb értelmezéseket több sorban is deklarálhatunk:

for {atom, number} <- [a: 1, b: 2, c: 3, d: 4],
    rem(number, 2) == 0 do
  atom
end

# => [:b, :d]

Több generátor használatával Descartes-szorzat hozható létre. Ez azt jelenti, hogy az első generátor által előállított minden érték egyszer párosul a második generátor által előállított minden értékkel:

for x <- [0, 1],
    y <- [0, 1] do
  {x, y}
end

# => [{0, 0}, {0, 1}, {1, 0}, {1, 1}]

Utasítások

Továbbra is az online divatbutikban dolgozol. Kitalálsz egy weboldalfunkciót, amely szettet javasol a felhasználónak. Sok javaslatot szeretnél adni, de rosszat nem, ezért a listakomprehenzió mellett döntesz, hiszen így könnyedén előállíthatsz szettkombinációkat, majd szűrhetsz rajtuk valamilyen szempont szerint.

A ruhadarabokat map formájában tároljuk:

%{
  item_name: "Descriptive Name",
  price: 99.00,
  color: "Ochre Red",
  base_color: "red"
}

1. Javasolj egy kombinációt

Valósítsd meg a get_combinations/3 függvényt úgy, hogy az fogadja a felsők listáját, az alsók listáját és az opciók kulcsszólistáját. Egyelőre az opciók alapértelmezett értéke egy üres kulcsszólista legyen. A függvény adja vissza a listák Descartes-szorzatát.

tops = [
  %{item_name: "Dress shirt"},
  %{item_name: "Casual shirt"}
]

bottoms = [
  %{item_name: "Jeans"},
  %{item_name: "Dress trousers"}
]

BoutiqueSuggestions.get_combinations(tops, bottoms)
# => [
#      {%{item_name: "Dress shirt"}, %{item_name: "Jeans"}},
#      {%{item_name: "Dress shirt"}, %{item_name: "Dress trousers"}},
#      {%{item_name: "Casual shirt"}, %{item_name: "Jeans"}},
#      {%{item_name: "Casual shirt"}, %{item_name: "Dress trousers"}}
#    ]

2. Szűrd ki az össze nem illő szetteket

Minden ruhadarabnak van :base_color mezője; ezzel a mezővel szűrd ki azokat a kombinációkat, amelyekben a felső és az alsó alapszíne megegyezik.

tops = [
  %{item_name: "Dress shirt", base_color: "blue"},
  %{item_name: "Casual shirt", base_color: "black"}
]

bottoms = [
  %{item_name: "Jeans", base_color: "blue"},
  %{item_name: "Dress trousers", base_color: "black"}
]

BoutiqueSuggestions.get_combinations(tops, bottoms)
# => [
#      {%{item_name: "Dress shirt", base_color: "blue"},
#       %{item_name: "Dress trousers", base_color: "black"}},
#      {%{item_name: "Casual shirt", base_color: "black"},
#       %{item_name: "Jeans", base_color: "blue"}}
#    ]

3. Szűrj a kombináció ára alapján

Minden ruhadarabhoz tartozik egy :price mező. Sok javaslatot szeretnél adni, de szeretnéd megadni a felhasználóknak a lehetőséget, hogy a keretükbe illő árat válasszanak. Az opciók kulcsszólistájából a :maximum_price segítségével szűrd ki azokat a kombinációkat, amelyeknél a felső és az alsó ára meghaladja a maximális árat.

Ha nincs megadva maximum_price, az alapértelmezett érték 100.00 legyen.

tops = [
  %{item_name: "Dress shirt", base_color: "blue", price: 35},
  %{item_name: "Casual shirt", base_color: "black", price: 20}
]

bottoms = [
  %{item_name: "Jeans", base_color: "blue", price: 30},
  %{item_name: "Dress trousers", base_color: "black", price: 75}
]

BoutiqueSuggestions.get_combinations(tops, bottoms, maximum_price: 50)
# => [
#      {%{item_name: "Casual shirt", base_color: "black", price: 20},
#       %{item_name: "Jeans", base_color: "blue", price: 30}}
#    ]
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elixir Exercism

Készen állsz elkezdeni a(z) Butikajánlások 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.