اولا
كل عام و انتم بخير و اعاده الله عليكم بالمن و بالخير و البركه
لا تنشغل بالحل كثيرا كي لا تهمل عباداتك الاصليه
و لا تنسي تجديد نيتك فأن طلب العلم عباده
لا تنسوني و اخي المعتقل سياسيا من جميل دعائكم
وصف التحدي :
متنساش تدعي لخواتنا ف غزه لو لسه عندك قلب و شوية دم
**مستوي التحدي : ** فوق متوسط برمجيا
قم بكتابة دالة اسمها: longestAlternatingSubstring تستقبل قيمة نصية من نوع string. تقوم هذه الدالة بإيجاد أطول سلسلة فرعية بالتناوب بين أعداد فردية وأعداد زوجية. والمعنى من ذلك أن يجب ان تكون السلسلة مكونة من عدد زوجي ويتليه عدد فردي.. ولا يشترط في ذلك ان تبدأ السلسلة بعدد زوجي. فمن الممكن أن تبدأ بعدد زوجي أو فردي.
ملحوظه : تقدر تحل التحدي و تتحقق من صحته من خلال الموقع هنا اهو : موقع سلسلة حل المشكلات (Problem Sloving)
بس خد بالك لو هتحل ع الموقع لازم اسم الداله يكون زي الاسم اللي موجود في وصف التحدي
عشان السلسه اللي المفروض تطلع لازم تكون رقم فردي او زوجي بعده عكسه بعده عكسه و هكذا
اما اللي انتي كاتباها :
1
بعده
2
لحد هنا تمام
بس بعد الا 2 في 6 يعني زوجي وراه زوجي
طريقة توليد السلاسل الفرعية:
أنتي بتولدي كل السلاسل الفرعية الممكنة بغض النظر عن طولها وبعدين بتشيكي على كل سلسلة لو فيها التناوب المطلوب … الطريقة دي منطقها صح لكن فيها مجهود زيادة لأننا بنشيك على سلاسل فرعية صغيرة حتى لو هي جزء من سلسلة أطول صحيحة
اختيار السلسلة النهائية:
المفروض إنك بتدوري على أطول سلسلة متناوبة لكن بسبب وجود سلاسل فرعية متداخلة ممكن ما توصلش للحل الأمثل لو ركزتي على التنقل مباشرةً على السلسلة الأساسية والتحقق منها بشكل متتالي هتضمن تجيبي أطول سلسلة متناوبة بشكل مباشر
اما عن تخريج الاوتبوت الصح بتاع ال 4 اختبارات فا دا عادي ممكن نخرجه لو عملنا داله نقولها لو لقيت المدخل كذا اعمل ريتيرن لكذا بمعني انهم مش عشان تتشيك الكود بس عشان تتشيك طريقة فهمك فا ممكن الكود يكون مظبوط بالصدفه مع دول اما مع مدخلات تانيه يبقي مش مظبوط زي مثلا المدخل دا :
def longest_substring(s):
substrings = []
candidates = []
# تعديل 1: خلت البداية من i + 2 بدل i + 1
# عشان نتأكد إن السلسلة الفرعية طولها على الأقل 2، لأن سلسلة طولها 1 مش هتنفع متناوبة
for i in range(len(s)):
for j in range(i + 2, len(s) + 1): # تعديل هنا لتبدأ من طول 2 بدلًا من 1
substrings.append(s[i:j])
for substring in substrings:
valid = True
for i in range(1, len(substring)):
if (int(substring[i]) % 2 == 1 and int(substring[i-1]) % 2 == 0) or (int(substring[i]) % 2 == 0 and int(substring[i-1]) % 2 == 1):
continue
else:
valid = False
break
if valid:
candidates.append(substring)
# تعديل: التأكد من وجود سلاسل قبل محاولة العثور على الأطول
# تعديل 2: اتأكدنا الأول إن فيه سلاسل (candidates) قبل ما نستخدم max()
# لأن لو السلاسل فاضيين هتطلع غلطة، فبنرجع "" في الحالة دي
if candidates:
return max(candidates, key=len)
else:
return ""
هو فيه حاجه كمان نسيت اقولها في الكود اللي انا كتبته هو هيطلع اطول string لاني قلت key=len فكدا أعتقد أنه مش هيكون جزء من سلسلة اطول ولا ايه راي حضرتك مع الأخذ في الاعتبار طبعا أنه ايوا هي فيها مجهود زيادة
معلش تاعبه حضرتك معايا بس ياريت تفهمني ايه الفرق ما بين استخدام continue و pass في الكود ده و بعتذر لو كنت مثقلة علي حضرتك و ده هيكون اخر سؤال إن شاء الله
انا لسه شايف السؤال دلوقت والله عشان جالي اشعار حد عملي لايك .
اولا اسألي براحتك عادي انا كدا كدا مش بفتح الموقع الا لما اكون فاضي اني ارد او اعمل بوست و كدا
الفرق بينهم :
ال continue بتستخدم داخل الحلقات for او while
و الغرض منها هي تخطي حلقه واحده مثلا عشان نفهم :
for i in range(5):
if i == 2:
continue
print(i)
هنا كدا لما ياجي عند الرقم 2 هيلاقيني عامله كونتينيو يعني بقوله تخطي الحلقه اللي انت فيها و هات اللي بعدها
يعني اكني بقوله حرفيا لما تلاقي الرقم 2 ارجع كمل اللوب و فكك من اللي تحتها
يعني الناتج هيبقي كدا :
0
1
3
4
اما ال pass دي مش بتعمل حاجه في منطق الكود ولكن بتتخطي فراغ المفروض ميكونش موجود مثلا :
def ex():
pass
هنا عملت ايه الطبيعي اني مينفعش اسيب الفراغ بتاع الداله كدا بدوون اي تعليمات فا هيروح عالمي ايرور لما اجي اجرب الكود حتي لو مش هستخدم الفانكشن دي في التيست بتاعي
وهنا بقا ياجي دورها انها بتملئ الفراغ دا عشان ميطلعلكش ايرور وانت بتيست الكود مثلا
بنستخدمها :
لما بكون مثلا حسب الخطة بتاعة الابلكيشن اللي هعمله عندي 3 فانكشنز فا بروح عشان منساش : اعمل التلاته
و اكتب تحت كل واحده فيهم pass عشان لو مكتبتش حاجه الكود هيبقي فيه ايرور و انا اكيد مثلا هبقي عايز اتيست الكود بدون ما اكتب الفانكشنز اللي تحت بمعني اني بستخدمها لما يبقي عندي في سطر معين فيه فراغ و المفروض حسب السينتاكس بتاع اللغه انه ميبقاش هنا في فراغ و انا مش عايز بايثون يديله اهتمام فا بقوله تخطي الفراغ السينتاكسي دا
فاهمه الفرق ؟
و بالمناسبه لو عملنا نفس المثال اللي فوق علي ال pass هنلاقيه طبع من 1 ل 5 عادي خالص اكني مش كاتب اي حاجه و دا لان بايثون لما يشوف ال pass كل اللي بيعمله انه بيفهم ان الكلمه دي تغطيه علي فراغ المفروض ميكونش موجود لان ال pass لما بتتكتب بتعمل كود برمجي فاضي لبايثون
و البالمناسبه بقا ال break
و دي شغاله زي ال كونتينيو بس الكونتينيو بتخلي الكود يتخطاها و يكمل بعدها ( الحلقه اللي بعدها يعني ) اما البريك بتوقف تنفيذ كل الحلقات من بعد الشرط اللي انت حاطه يعني لما خدنا نفس مثال فوق و بدل كونتينيو كتبنا بريك هيطبع
0
1
بس مش هيطبع اي حاجه تاني
و في الاخير أكد انك ابقا اسأل عادي معنديش مشكله ممكن بس ابقا ادعيلي ربنا يظبطلي دنيتي كدا و يفك كرب و اسر اخويا مش عايز اكتر من كدا