مسیرها
/
Elixir
Elixir
/
تمرین‌ها
/
مدیر سیستم آلمانی
مدیر سیستم آلمانی

مدیر سیستم آلمانی

تمرین یادگیری

مقدمه

Charlists

Charlists با استفاده از سیگیل ~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"

دستورالعمل‌ها

شما به عنوان مدیر سیستم در یک شرکت بزرگ در مونیخ آلمان کار می‌کنید. یکی از مسئولیت‌های شما مدیریت حساب‌های ایمیل است.

شکایت‌هایی را از افراد شنیده‌اید که می‌گویند نمی‌توانند به آقای Müller ایمیل بفرستند. خیلی زود متوجه می‌شوید که بیشتر شرکت از یک کلاینت ایمیل قدیمی استفاده می‌کند که 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. حروف آلمانی را جایگزین کنید

۴ کاراکتر غیر 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.