# المهمة 1: طباعة "مرحباً بالعالم"
print("مرحباً بالعالم")

# المهمة 2: جمع رقمين
num1 = float(input("أدخل الرقم الأول: "))
num2 = float(input("أدخل الرقم الثاني: "))
print(f"مجموع الرقمين: {num1 + num2}")

# المهمة 3: التحقق من عدد فردي أو زوجي
num = int(input("أدخل عددًا: "))
if num % 2 == 0:
    print("العدد زوجي")
else:
    print("العدد فردي")

# المهمة 4: حساب المتوسط
grade1 = float(input("أدخل الدرجة الأولى: "))
grade2 = float(input("أدخل الدرجة الثانية: "))
grade3 = float(input("أدخل الدرجة الثالثة: "))
average = (grade1 + grade2 + grade3) / 3
print(f"المتوسط: {average}")

# المهمة 5: إنشاء قائمة من الأرقام الزوجية
even_numbers = list(range(2, 21, 2))
print("الأرقام الزوجية من 2 إلى 20:", even_numbers)

# المهمة 6: حساب العامل المشترك الأكبر (GCD)
import math
num1 = int(input("أدخل الرقم الأول: "))
num2 = int(input("أدخل الرقم الثاني: "))
gcd = math.gcd(num1, num2)
print(f"العامل المشترك الأكبر: {gcd}")

# المهمة 7: التحقق من وجود عنصر في قائمة
element = input("أدخل العنصر الذي تريد البحث عنه: ")
my_list = ["تفاح", "موز", "برتقال", "عنب"]
if element in my_list:
    print("العنصر موجود في القائمة")
else:
    print("العنصر غير موجود في القائمة")

# المهمة 8: حساب مجموع الأرقام في قائمة
my_list = [1, 2, 3, 4, 5]
sum_of_numbers = sum(my_list)
print(f"مجموع الأرقام في القائمة: {sum_of_numbers}")

# المهمة 9: إنشاء قاموس وتحديثه
students = {"أحمد": 90, "سارة": 85}
new_name = input("أدخل اسم الطالب الجديد: ")
new_grade = int(input("أدخل درجة الطالب الجديد: "))
students[new_name] = new_grade
print("القاموس المحدث:", students)

# المهمة 10: استخدام الدوال
def square(number):
    return number ** 2

num = float(input("أدخل عددًا: "))
print(f"مربع العدد: {square(num)}")

# المهمة 11: التحقق من صحة البريد الإلكتروني وعنوان IP
import re
email = input("أدخل البريد الإلكتروني: ")
ip = input("أدخل عنوان IP: ")
email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
ip_pattern = r'^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$'
if re.match(email_pattern, email):
    print("البريد الإلكتروني صحيح")
else:
    print("البريد الإلكتروني غير صحيح")
if re.match(ip_pattern, ip):
    print("عنوان IP صحيح")
else:
    print("عنوان IP غير صحيح")

# المهمة 12: حساب التكرارات في نص
text = input("أدخل النص: ")
word_counts = {}
for word in text.split():
    word_counts[word] = word_counts.get(word, 0) + 1
print("تكرار الكلمات في النص:", word_counts)

# المهمة 13: إنشاء فئة لتمثيل النقاط في الفضاء ثنائي الأبعاد
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def distance_to(self, other):
        return math.sqrt((self.x - other.x) ** 2 + (self.y - other.y) ** 2)

    def __str__(self):
        return f"({self.x}, {self.y})"

x1, y1 = map(float, input("أدخل إحداثيات النقطة الأولى (x y): ").split())
x2, y2 = map(float, input("أدخل إحداثيات النقطة الثانية (x y): ").split())
point1 = Point(x1, y1)
point2 = Point(x2, y2)
print(f"المسافة بين النقطتين: {point1.distance_to(point2)}")
print(f"النقطة الأولى: {point1}")
print(f"النقطة الثانية: {point2}")

# المهمة 14: فرز قائمة من القواميس حسب قيمة معينة
data = [{"name": "أحمد", "age": 25}, {"name": "سارة", "age": 22}, {"name": "محمد", "age": 30}]
sorted_data = sorted(data, key=lambda x: x["age"])
print("القائمة بعد الفرز حسب العمر:", sorted_data)

# المهمة 15: تنفيذ خوارزمية البحث الثنائي
def binary_search(sorted_list, target):
    left, right = 0, len(sorted_list) - 1
    while left <= right:
        mid = (left + right) // 2
        if sorted_list[mid] == target:
            return mid
        elif sorted_list[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

sorted_list = [1, 3, 5, 7, 9, 11]
target = int(input("أدخل العنصر الذي تبحث عنه: "))
index = binary_search(sorted_list, target)
if index != -1:
    print(f"العنصر موجود في الفهرس: {index}")
else:
    print("العنصر غير موجود في القائمة")
