مسائل

قاموس داخل قاموس

إذا كان لديك قاموس متداخل كالتالي:

user_preferences = {
    'theme': 'dark',
    'language': 'Arabic',
    'notifications': {
        'email': True,
        'sms': False,
        'push': True
    },
    'last_updated': '2021-09-01',
    'emails': ['example1@domain.com', 'example2@domain.com']
}

المطلوب أن تسحب من تفضيلات المستخدم المتغيرات التالية:

  • theme
  • notifications.sms
  • آخر عنصر في: emails

توحيد الصيغة

في هذا المثال، تعود هذه النصوص كلها إلى نفس المعنى.

  • (‘medina’, ‘madinah’, ‘madina’, ‘al madinah’, ‘al madina’, ‘medina’, ‘madinah’, ‘madina’, ‘المدينة’, ‘مدينة’),
  • (‘mecca’, ‘makkah’, ‘makka’, ‘makkah’, ‘makkah’, ‘مكة’, ‘مكه’),
def normalize_city_name(city_name: str) -> str:
    pass
assert (
    'medina' ==
    normalize_city_name('medinah') ==
    normalize_city_name('al madina') ==
    normalize_city_name('المدينة') ==
    normalize_city_name('المدينه')
)
assert (
    'mecca' ==
    normalize_city_name('makkah') ==
    normalize_city_name('makka') ==
    normalize_city_name('مكة') ==
    normalize_city_name('مكه')
)

تصحيح الإملاء

اكتب فعلًا يصحح الإخطاء الشائعة في الإملاء العربي.

  • إبدال التاء المربوطة بالهاء: مكتبه، لعبه، روايه
  • إبدال الظاء بالضاد والعكس: ظابط، قرظ، ضهر
  • زيادة الياء: أحسنتي، رأيتكي

والمطلوب فقط تصحيح الأخطاء المذكورة.

def correct_spelling(word: str) -> str:
    pass
assert correct_spelling('المكتبه فيها الروايه التي أبحث عنها') ==
    'المكتبة فيها الرواية التي أبحث عنها'
    
assert correct_spelling('أعطاك الظابط القرظ بعد الضهر') ==
    'أعطاك الضابط القرض بعد الظهر'

assert correct_spelling('رأيتكي أحسنتي') ==
    'رأيتك أحسنت'

حساب الجُمَّل

حِسَاب الجُمَّل هي طريقة لتسجيل صور الأرقام والتواريخ باستخدام الحروف الأبجدية، إذ يُعطى كل حرف رقما معينا يدل عليه.

فكانوا من تشكيلة هذه الحروف ومجموعها يصلون إلى ما تعنيه من تاريخ مقصود وبالعكس كانوا يستخدمون الأرقام للوصول إلى النصوص.

حساب الجمَّل
ا 1 ي 10 ق 100 غ 1000
ب 2 ك 20 ر 200 بغ 2000
جـ 3 ل 30 ش 300 جغ 3000
د 4 م 40 ت 400 دغ 4000
هـ 5 ن 50 ث 500 هغ 5000
و 6 س 60 خ 600 وغ 6000
ز 7 ع 70 ذ 700 زغ 7000
ح 8 ف 80 ض 800 حغ 8000
ط 9 ص 90 ظ 900 طغ 9000

اكتب تفاصيل الفعل الذي يحسب الجمَّل لكلمة معينة.

def gematria(word: str) -> int:
    pass
assert gematria('غرم') == 1240
assert gematria('رب') == 202
assert gematria('ريح') == 218
assert gematria('شعب') == 372

وكذلك في العبارات:

assert gematria('في المشمش') == 801 == 80+10+1+30+40+300+40+300
assert gematria('مات الشعر بعده') == 1123 == 40+1+400+1+30+300+70+200+2+70+4+5

التوفيق بين مجموعتين

مسألة التوفيق بين مجموعتين تجدها في سياقات كثيرة.

نريد في هذا التمرين التوفيق بين أشخاص وما لديهم من مهارات وبين شركات وما تطلبها من هذه المهارات.

يمكن أن تبدأ بهذا الشكل لإيجاد كمية التوافق:

person_skills = {"Python", "SQL"}
needed_skills = {"Python", "R", "Ninja", "Gymnastics", "Art of War"}

لكن في الواقع تأتي البيانات لمجموعة من الأشخاص مع مجموعة من الشركات هكذا:

people = [
    {"name": "Ahmad", "skills": ["Python", "Go", "JavaScript", "Machine Learning", "Statistics"]},
    {"name": "Jawad", "skills": ["Management", "Business", "Marketing"]},
    {"name": "Belal", "skills": ["Python", "Statistics", "R", "Management"]},
]

companies = [
    {"name": "X", "skills_needed": ["Python", "Machine Learning", "Statistics"]},
    {"name": "Y", "skills_needed": ["Sales", "Marketing", "Leadership", "Management"]},
    {"name": "Z", "skills_needed": ["Statistics", "R", "Management"]},
]

اكتب برنامج للتوفيق بين المجموعتين بحيث ترتب على بما يناسب الشركات مرة، وبما يناسب الأشخاص مرة.

X: Ahmad, ...
Y: Jawad, ...
Z: Belal, ...

Ahmad: X, ...
Jawad: Y, ...
Belal: Z, ...