트랙
/
Gleam
Gleam
/
연습 문제
/
최고 점수 게시판
최고 점수 게시판

최고 점수 게시판

학습 연습 문제

소개

타입 별칭

타입 별칭

타입 별칭을 사용하면 Gleam에서 기존 타입에 편리한 이름을 붙일 수 있어요. 그 타입을 직접 쓰기에는 번거로울 때 유용하죠.

pub type Headers =
  List(#(String, String))

pub fn html_headers() -> Headers {
  [
    #("content-type", "text/html"),
    #("x-frame-options", "DENY"),
  ]
}

pub type으로 작성하면 별칭을 정의된 모듈 밖에서도 사용할 수 있어요. pub을 생략하면 별칭은 비공개가 되어 다른 모듈에서 참조할 수 없어요.

딕셔너리

Gleam의 딕셔너리는 정보를 키-값 쌍으로 저장하는 자료 구조예요. 다른 언어에서는 연관 배열, 해시, 딕셔너리 등으로도 알려져 있어요.

딕셔너리에서는 어떤 타입이든 키와 값으로 사용할 수 있어요. 그리고 항목을 조회하거나 반환할 때 순서를 보장하지 않아요.

딕셔너리 다루기

딕셔너리는 gleam/dict 모듈의 함수로 만들고 다뤄요.

// Create an empty dict
let dict1 = dict.new()

// Create a dict with some values
let dict2 = dict.from_list([
  #("name", "Gleam"),
  #("colour", "Pink"),
])

// Add a value to a dict
let dict3 = dict.insert(dict2, "website", "https://gleam.run")

// Get a value from a dict
let name = dict.get(dict3, "name")
// -> Ok("Gleam")

지침

이 연습 문제에서는 동네 오락실에서 가장 인기 있는 게임의 최고 점수를 기록하는 방법을 구현해요.

구현할 함수는 5개이고, 대부분 최고 점수를 담는 객체를 다루는 것과 관련이 있어요.

1. 새 최고 점수판 만들기

최고 점수판 역할을 하는 딕셔너리를 반환하는 create_score_board 함수를 만들어요. 이 객체의 키는 플레이어의 이름이고, 값은 그 플레이어의 점수예요. 테스트를 위해 객체에 항목 하나를 직접 넣으려고 해요. 이 초기 항목은 플레이어 이름이 "The Best Ever"이고 점수가 1_000_000이어야 해요.

create_score_board()
// returns an object with one initial entry

2. 점수판에 플레이어 추가하기

최고 점수판에 플레이어를 추가하려면 add_player 함수를 정의해요. 이 함수는 매개변수 3개를 받아요:

  • 첫 번째 매개변수는 기존 점수판 딕셔너리예요.
  • 두 번째 매개변수는 플레이어의 이름을 나타내는 문자열이에요.
  • 세 번째 매개변수는 점수를 나타내는 정수예요.

이 함수는 새 플레이어와 점수를 추가한 딕셔너리를 반환해요.

3. 점수판에서 플레이어 제거하기

플레이어가 오락실 규칙을 어기면, 최고 점수판에서 직접 제거해요. 매개변수 2개를 받는 remove_player를 정의해요:

  • 첫 번째 매개변수는 기존 점수판 딕셔너리예요.
  • 두 번째 매개변수는 플레이어의 이름을 나타내는 문자열이에요.

이 함수는 제거한 플레이어가 빠진 딕셔너리를 반환해야 해요.

플레이어가 애초에 점수판에 없었다면 점수판에는 아무 일도 일어나지 않아야 하고, 그대로 반환돼야 해요.

4. 플레이어의 점수 올리기

플레이어가 오락실에서 게임을 한 판 더 끝내면, 점수판에 있던 이전 점수에 일정한 점수가 더해져요. 매개변수 3개를 받는 update_score를 구현해요:

  • 첫 번째 매개변수는 기존 점수판 딕셔너리예요.
  • 두 번째 매개변수는 점수를 올릴 플레이어의 이름이에요.
  • 세 번째 매개변수는 저장된 최고 점수에 더하려는 점수예요.

이 함수는 갱신된 점수가 담긴 딕셔너리를 반환해야 해요.

플레이어가 애초에 점수판에 없었다면 점수판에는 아무 일도 일어나지 않아야 하고, 그대로 반환돼야 해요.

5. 월요일 보너스 점수 적용하기

오락실은 월요일마다 별도의 점수판을 운영해요. 하루가 끝나면 그 점수판에 있는 플레이어마다 100점을 추가로 받아요.

점수판을 받는 apply_monday_bonus 함수를 구현해요. 이 함수는 그 점수판에 올라 있는 플레이어마다 보너스 점수를 더한 딕셔너리를 반환해요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Gleam Exercism

최고 점수 게시판 문제를 시작해 볼 준비가 됐나요?

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