트랙
/
Elixir
Elixir
/
연습 문제
/
독일 시스템 관리자
독일 시스템 관리자

독일 시스템 관리자

학습 연습 문제

소개

Charlist

charlist는 ~c 시길을 사용해 만들어요.

~c"hello"
Note

Elixir의 이전 버전에서는 charlist를 작은따옴표를 사용해 'hello'처럼 표현했어요.

문자열과 아주 비슷하게 생겼지만, 두 자료형은 서로 꽤 달라요. charlist는 정수로 이루어진 배열이에요. 이 정수들은 주어진 문자의 유니코드 값, 즉 코드 포인트를 나타내요.

[65, 66, 67]
# => ~c"ABC"

문자 앞에 ?를 붙이면 그 문자의 코드 포인트를 얻을 수 있어요.

?A
# => 65

[?:, ?)]
# => ~c":)"

charlist는 배열이기 때문에 재귀와 패턴 매칭을 사용해 다른 배열과 똑같이 다룰 수 있어요.

[first_letter | _] = ~c"cat"
first_letter
# => 99

++를 사용해 두 배열을 연결할 수 있어요.

~c"hi" ++ ~c"!"
# => ~c"hi!"

첫 번째 배열이 길수록 연결이 느려지므로, 길이가 임의인 배열에 반복해서 덧붙이는 것은 피하는 게 좋아요.

case

case는 주어진 값을 여러 패턴과 비교할 수 있게 해주는 제어 흐름 구조예요. case 표현식의 절들은 일치하는 것을 찾을 때까지 위에서 아래로 평가돼요.

age = 15

case age do
  0 -> ~c"infant"
  age when age < 4 -> ~c"baby"
  age when age < 13 -> ~c"child"
  age when age < 18 -> ~c"teenager"
  _ -> ~c"adult"
end

# => ~c"teenager"

지침

독일 뮌헨에 있는 대기업의 시스템 관리자로 일하고 있어요. 맡은 업무 중 하나는 이메일 계정을 관리하는 거예요.

Mr. Müller에게 이메일을 보낼 수 없다는 불만이 곳곳에서 들려오고 있어요. 알아보니 회사 사람들 대부분이 오래된 이메일 클라이언트를 쓰고 있는데, 그 클라이언트가 ASCII가 아닌 문자 때문에 müller@firma.de를 올바른 이메일 주소로 인식하지 못하는 거예요.

사람들에게 애용하는 오래된 이메일 클라이언트를 버리라고 하는 건 이미 진 싸움이에요. 그래서 모든 이메일 계정에 대해 정리한 별칭을 만들기로 해요.

1. 소문자를 제외한 모든 문자를 제거해 기존 사용자 이름 정리하기

sanitize/1 함수를 구현해요. 사용자 이름을 charlist로 받아서, 소문자를 제외한 모든 문자를 제거한 사용자 이름을 반환해야 해요.

Username.sanitize(~c"schmidt1985")
# => ~c"schmidt"

2. 밑줄 문자 허용하기

sanitize/1 함수를 확장해요. 사용자 이름에서 밑줄 문자는 제거하면 안 돼요.

Username.sanitize(~c"mark_fischer$$$")
# => ~c"mark_fischer"

3. 독일어 문자 대체하기

독일어 알파벳에는 ASCII가 아닌 문자가 네 개 있고, 모두 널리 알려진 ASCII 대체 문자가 있어요.

독일어 문자 ASCII 대체 문자
ä ae
ö oe
ü ue
ß ss

sanitize/1 함수를 확장해요. 표에 따라 독일어 문자를 대체해야 해요. 모든 사용자 이름은 이미 소문자라고 가정해도 돼요.

Username.sanitize(~c"cäcilie_weiß")
# => ~c"caecilie_weiss"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elixir Exercism

독일 시스템 관리자 문제를 시작해 볼 준비가 됐나요?

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