Треки
/
Elixir
Elixir
/
Вправи
/
Німецький системний адміністратор
Німецький системний адміністратор

Німецький системний адміністратор

Навчальна вправа

Вступ

Списки символів

Списки символів створюють за допомогою сигіла ~c.

~c"hello"
Note

Звернімо увагу: у старіших версіях Elixir списки символів записуються як 'hello' в одинарних лапках.

Хоча списки символів дуже схожі на рядки тексту (англ. string), ці два типи даних досить різняться між собою. Список символів - це список цілих чисел. Цілі числа представляють значення Unicode заданого символу, які також називають кодовими точками.

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

Щоб отримати кодову точку символу, поставмо ? перед ним.

?A
# => 65

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

Оскільки списки символів - це списки, з ними можна працювати так само, як і з будь-яким іншим списком: за допомогою рекурсії та зіставлення зі зразком.

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

Вказівки

Ми працюємо системним адміністратором у великій компанії в Мюнхені, Німеччина. Одне з наших обовʼязків - керування електронними поштами.

Ми чуємо скарги від людей, які кажуть, що не можуть надіслати листів пану Мюллеру. Швидко стає зрозуміло, що більшість компанії користується старим поштовим клієнтом, який не розпізнає müller@firma.de як дійсну адресу електронної пошти через не-ASCII символ.

Переконувати людей відмовитися від улюбленого старого поштового клієнта - марна справа, тож ми вирішуємо створити очищені псевдоніми для всіх поштових акаунтів.

1. Очистити наявні імена користувачів, прибравши все, крім малих літер

Реалізуймо функцію sanitize/1. Вона має приймати імʼя користувача як charlist і повертати імʼя користувача, з якого прибрано всі символи, крім малих літер.

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

2. Дозволити підкреслення

Розширмо функцію sanitize/1. Вона не повинна прибирати підкреслення з імені користувача.

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

3. Замінити німецькі символи

У німецькому алфавіті є 4 не-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 вправ та справжнє наставництво від людей, і все це безкоштовно.