حِسَاب الجُمَّل وهو حساب استخدم في اللغات السامية؛ حيث نجده مستعملًا في بلاد الهند قديمًا، وعند اليهود؛ فالأبجدية العبرية تتطابق مع الأبجدية العربية حتى حرف التاء (أبجد، هوز، حطي، كلمن، سعفص، قرشت) أي تتكون من 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
اكتب تفاصيل الإجراء الذي يحسب الجمَّل لكلمة معينة.
ثم نعرّف الإجراء بأنه يأخذ نصًّا str ويُنتج رقمًا int:
def gematria(word: str) ->int: total =0for i inrange(0, len(word), 2): pair = word[i:i+2]if pair in gematria_map: total += gematria_map[pair]else: a, b = pairif 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، فكانوا يراعون عند تركيب الجُمّل أن يكون الحرف المعبر عن العدد الأكبر في المقدمة، ثم يليه الأصغر منه وهكذا دواليك فنجد من الأمثلة على ذلك:
يقال أنه عندما توفي السلطان الظاهر برقوق أول سلاطين المماليك البرجية، قام بعض الظرفاء بصياغة عبارة تحدد تاريخ وفاته فقال: «وفاة برقوق في المشمش»، وعندما نحسب تاريخ وفاة برقوق وهي «في المشمش» يكون الناتج:
(80+10+1+30+40+300+40+300) = 801، وبالتالي فتكون العبارة: «وفاة برقوق 801» هجرية وذلك صحيح.
أولاً سنرتب القائمة بناءً على العمر، ثم نأخذ العناصر اثنين اثنين، وبذلك نكون حققنا الهدف.
def make_pairs_by_age_diff(items: list[tuple[str, int]]) ->list[tuple[str, str]]:"""Make pairs of people by their age difference minimum.""" ages = [age for name, age in items] ages.sort() items_sorted = []for age in ages:for i in items:if i[1] == age: items_sorted.append(i) pairs = []for i inrange(len(items_sorted) -1): pairs.append((items_sorted[i], items_sorted[i+1]))return pairs
def sort_nested_dict(d: dict) ->dict:"""Sorts a dictionary by values""" result = {}for key in d.keys(): result[key] = {} values = [v for v in d[key].values()] values.sort(reverse=True)for v1 in values:for k, v2 in d[key].items():if v2 == v1: result[key][k] = v2return result