트랙
/
Elixir
Elixir
/
연습 문제
/
와인 저장고
와인 저장고

와인 저장고

학습 연습 문제

소개

키워드 배열

키워드 배열은 키-값 데이터 구조예요.

[month: "April", year: 2018]

키워드 배열은 {key, value} 튜플의 배열이고, 같은 형태로 쓸 수도 있지만 더 짧은 문법이 더 널리 쓰여요.

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

키워드 배열의 키는 반드시 아톰이어야 하지만, 값은 무엇이든 될 수 있어요. 각 키는 한 번 이상 사용할 수 있어요. 키워드 배열의 키-값 쌍에는 순서가 있어요.

키워드 배열은 배열과 같은 방식으로 다룰 수도 있고, Keyword 모듈을 사용할 수도 있어요.

지침

규모가 큰 와인 저장고를 갖춘 고급 레스토랑의 매니저로 일하고 있어요. 손님 중에는 까다로운 와인 애호가가 많죠. 특정 손님에게 딱 맞는 와인 한 병을 찾는 일은 쉽지 않아요.

IT에 능숙한 레스토랑 사장님답게, 앱을 만들어서 와인 선택 과정을 더 빠르게 하기로 했어요. 이 앱을 이용하면 손님이 취향에 따라 와인을 걸러 볼 수 있어요.

1. 와인 색상 설명하기

앱의 시작 화면에서 와인 색상별로 짧은 설명을 보여 주고 싶어요.

WineCellar.explain_colors/0 함수를 구현해요. 이 함수는 인자를 받지 않고, 와인 색상을 키로, 설명을 값으로 하는 키워드 리스트를 반환해요.

Color Explanation
: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. 주어진 색상의 와인 모두 가져오기

와인 한 병은 포도 품종, 연도, 원산지 국가로 이루어진 3-튜플로 표현해요. 와인은 색상별로 키워드 리스트에 저장돼 있어요.

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

WineCellar.filter/3 함수를 구현해요. 이 함수는 와인 키워드 리스트, 색상을 나타내는 atom, 옵션 키워드 리스트를 인자로 받고, 옵션의 기본값은 []예요. 주어진 색상의 와인 리스트를 반환해야 해요.

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. 주어진 색상이면서 주어진 연도에 병입된 와인 모두 가져오기

WineCellar.filter/3 함수를 확장해요. :year 옵션이 주어지면, 주어진 색상이면서 주어진 연도의 와인 리스트를 반환해야 해요.

이미 구현된 WineCellar.filter_by_year/2 함수를 사용해요. 이 함수는 와인 리스트와 연도를 인자로 받아, 주어진 연도의 와인 리스트를 반환해요.

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. 주어진 색상이면서 주어진 국가에서 병입된 와인 모두 가져오기

WineCellar.filter/3 함수를 확장해요. :country 옵션이 주어지면, 주어진 색상이면서 주어진 국가의 와인 리스트를 반환해야 해요.

이미 구현된 WineCellar.filter_by_country/2 함수를 사용해요. 이 함수는 와인 리스트와 국가를 인자로 받아, 주어진 국가의 와인 리스트를 반환해요.

:year와 :country 옵션이 순서에 상관없이 둘 다 주어졌을 때도 함수가 제대로 동작하는지 확인해요.

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

# => []
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elixir Exercism

와인 저장고 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.