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

المسألة

حِسَاب الجُمَّل وهو حساب استخدم في اللغات السامية؛ حيث نجده مستعملًا في بلاد الهند قديمًا، وعند اليهود؛ فالأبجدية العبرية تتطابق مع الأبجدية العربية حتى حرف التاء (أبجد، هوز، حطي، كلمن، سعفص، قرشت) أي تتكون من 22 حرفا وتزيد العربية: (ثخذ، ضظغ). واستخدمه المسلمون في تثبيت التاريخ. لكل حرف مدلول رقمي يبدأ بالرقم 1 وينتهي عند الرقم 1000.

حساب الجمَّل
ا 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

فإذا أرادوا كتابة الرقم (1240) كتبوا «غرم»، لأن الغين 1,000، والراء 200، والميم 40، فكانوا يراعون عند تركيب الجُمّل أن يكون الحرف المعبر عن العدد الأكبر في المقدمة، ثم يليه الأصغر منه وهكذا دواليك فنجد من الأمثلة على ذلك:

assert gematria('غرم') == 1240
assert gematria('رب') == 202
assert gematria('ريح') == 218
assert gematria('شعب') == 372

يقال أنه عندما توفي السلطان الظاهر برقوق أول سلاطين المماليك البرجية، قام بعض الظرفاء بصياغة عبارة تحدد تاريخ وفاته فقال: «وفاة برقوق في المشمش»، وعندما نحسب تاريخ وفاة برقوق وهي «في المشمش» يكون الناتج:

(80+10+1+30+40+300+40+300) = 801، وبالتالي فتكون العبارة: «وفاة برقوق 801» هجرية وذلك صحيح.

assert gematria('في المشمش') == 801 == 80+10+1+30+40+300+40+300

يقال أيضاً أن شاعراً يسمى الدّلنجاوي مات فرثاه صديق له فقال:

سألتُ الشّعرَ هل لكَ من صديقٍ وقد سكنَ الدّلنجاويّ لحــده
فصاحَ وخرّ مغشياً عليــــه وأصبح راقداً في القبر عنــده
فقلتُ لمن يقول الشعر أقْصِــر لقد أرّختُ: مات الشعرُ بعـده

ويتضح لنا أن تاريخ الوفاة يكون في معرفة حساب العبارة «مات الشعرُ بعدَهُ»، فيكون الحساب:

(40+1+400+1+30+300+70+200+2+70+4+5) = (1123)، وذلك يعني أن الشاعر الدلنجاوي توفي في عام 1123 للهجرة.

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

الحل












حِسَاب الجُمَّل وهو حساب استخدم في اللغات السامية؛ حيث نجده مستعملًا في بلاد الهند قديمًا، وعند اليهود؛ فالأبجدية العبرية تتطابق مع الأبجدية العربية حتى حرف التاء (أبجد، هوز، حطي، كلمن، سعفص، قرشت) أي تتكون من 22 حرفا وتزيد العربية: (ثخذ، ضظغ). واستخدمه المسلمون في تثبيت التاريخ. لكل حرف مدلول رقمي يبدأ بالرقم 1 وينتهي عند الرقم 1000.

حساب الجمَّل
ا 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

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

أولاً نعرّف قاموسًا يحول الحروف إلى أرقام:

gematria_map = {
    'ا': 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,
}

ثم نعرّف الإجراء بأنه يأخذ نصًّا str ويُنتج رقمًا int:

def gematria(word: str) -> int:
    total = 0
    for i in range(0, len(word), 2):
        pair = word[i:i+2]
        if pair in gematria_map:
            total += gematria_map[pair]
        else:
            a, b = pair
            if a in gematria_map:
                total += gematria_map[a]
            if b in gematria_map:
                total += gematria_map[b]
    return total
  • يبدأ الحساب بمتغير total يساوي 0
  • نأتي على الكلمة حرفين ثم ننتقل منهما إلى الحرفين التاليين (وذلك بتحديد حجم الخطوة: 2) for i in range(0, len(word), 2)
  • نقرأ الحرفين معًا: pair = word[i:i+2] من الموضع i إلى الموضع i+2؛ فهذه شريحة مكوَّنة من نص فيه حرفان
  • إذا كان هذ الزوج موجودًا في القاموس gematria_map، فإننا نضيف قيمته إلى المتغير total
  • فإن لم يكن موجودًا فإننا نعتبر كل حرفٍ على حدة: a, b = pair
  • فإن كان الأول موجودًا في القاموس فإننا نضيف قيمته إلى المتغير total
  • وإن كان الثاني موجودًا في القاموس فإننا نضيف قيمته إلى المتغير total
  • وأخيرًا نعيد المتغير return total

فإذا أرادوا كتابة الرقم (1240) كتبوا «غرم»، لأن الغين 1,000، والراء 200، والميم 40، فكانوا يراعون عند تركيب الجُمّل أن يكون الحرف المعبر عن العدد الأكبر في المقدمة، ثم يليه الأصغر منه وهكذا دواليك فنجد من الأمثلة على ذلك:

assert gematria('غرم') == 1240
assert gematria('رب') == 202
assert gematria('ريح') == 218
assert gematria('شعب') == 372

يقال أنه عندما توفي السلطان الظاهر برقوق أول سلاطين المماليك البرجية، قام بعض الظرفاء بصياغة عبارة تحدد تاريخ وفاته فقال: «وفاة برقوق في المشمش»، وعندما نحسب تاريخ وفاة برقوق وهي «في المشمش» يكون الناتج:

(80+10+1+30+40+300+40+300) = 801، وبالتالي فتكون العبارة: «وفاة برقوق 801» هجرية وذلك صحيح.

assert gematria('في المشمش') == 801 == 80+10+1+30+40+300+40+300

يقال أيضاً أن شاعراً يسمى الدّلنجاوي مات فرثاه صديق له فقال:

سألتُ الشّعرَ هل لكَ من صديقٍ وقد سكنَ الدّلنجاويّ لحــده
فصاحَ وخرّ مغشياً عليــــه وأصبح راقداً في القبر عنــده
فقلتُ لمن يقول الشعر أقْصِــر لقد أرّختُ: مات الشعرُ بعـده

ويتضح لنا أن تاريخ الوفاة يكون في معرفة حساب العبارة «مات الشعرُ بعدَهُ»، فيكون الحساب:

(40+1+400+1+30+300+70+200+2+70+4+5) = (1123)، وذلك يعني أن الشاعر الدلنجاوي توفي في عام 1123 للهجرة.

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