• 0
kenham

تمرين بسيط(palindromise number)

سؤال

ال palindrom هو كلمة أم عدد تقرأ من اليمين أو لليسار أو من اليسار لليمين فتبقى نفس القراءة

 

مثلا: Dewed   mom

و 121  32123

 

المطلوب في هذا التمرين هو صنع برنامج بالبايثون

 

تعطيه عددا فيعطيك أقرب palindrome لهذا العدد بحث يكون الباليدروم الناتج إما أصغر أو يساوي العدد المدخل

 

هذا التمرين منقول من موقع إختبار القدرات  http://www.spoj.com/

 

في إنتظار مشاركاتكم

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

32 إجابة على هذا السؤال .

  • 0

ما هذا الموضوع مطروح منذ أسبوع ولا محاولة واحدة على الأقل

 

لا يهم أن تعرف على الأقل ناقش معي

 

في انتضار تفاعلكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

انا بصراحة تعجبني الألغاز ...

لكنني مبتدئ جدا وسأحاول قدر الامكان .. إن شاء الله اتوصل للحل

شكرا لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

في انتضار مشاركتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ممكن توضيح اكثر

مثلا لو ادخلت هذا الرقم 12345 فما المفترض ان يكون الناتج؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذه مشاراكتي (انا مبتدئ جدا :( )

#!/usr/bin/env pythondef check(word):    i = 0    no = 0    while i < len(word):        if word[i] == word[-i-1]:            pass        else:            no += 1            i += 1            if no != 0:        return False        return True##################################word = input('Enter any word: ')if check(word.lower()):    print('Yes')else:    print('No')
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بصراحة  انا  لست  مبرمج  بايثون  جيد 

 

لكن  ما  اعرفه  ان  ما  نحتاجه  هنا  هو  قراءة  مدخلات  بالترتيب   عن  طريق  الدالة  splite   !!!!

 

ثم  نخزن  القيمة   في  مصفوفة  بعدها  نستطيع  طباعة  الاعداد   قبل  آخر  عنصر  في  المصفوفة  لكن  بعكس  الترتيب

 

يعني  مثلا  لو  ادخلنا    123    يكون  الناتج       12321   

 

ارجوا  ان  يكو ن  كلامي  صحيح  

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الأخ   m ahmed    عمل جيد كمبتدأ البرنامج الذي صنعته يعمل لكنه يحتاج لتطوير

 

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

 

ثانيا أنت صنعت برنامج يقوم باخبارنا إذا كان النص المدخل palindrome و أنا قلت برنامج يطبع أقرب palindrom للعدد المدخل (إن كان العدد palindrome يطبعه و إلا يجد أقرب palindrome له =< العدد المدخل)

 

بداية حاول تطوير برنامجك،قم بحذف التعليمات التي لا فائدة منها أو بتجنبها

 

مثلا  يمكننا إستعمال الأمر break مكان n+=1  فلا نحتاج أن نواصل العمل فقذ تبين عندها أن النص المدخل ليس palindrom

و أنت تقارن مقارنة مزدوجة يعني من ال0 لل len(word)

 

كان عليك أن تقارن النصف فقط

 

سأنتضرك ماولاتك لتكوير يرنامج سأساعدك حتي تكنبة مثلي في ست أسكر من دون تكرارات

 

و عندها ستكون مستعدا لصنع البرنامج المطلوب

 

بالنسبة للأخ   AGASHE   أقر palindrom ل 123 هو 222 و ليس 12321 هذا يعيد جدا

 

المشكلة ليست في أنك مبتدأ بالبايثون المشكلة أنك لم تفهم المطلةب بغد راجع سؤالي و ابحث في النت و ستجد ضالتك

 

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خير
مساعدك وتوضيحاتك زادتني حماس
أشكرك جدا

عندي ملاحظة بسيطة اليس اقرب palindrome للعد 123 هو 121 وليس 222 !\

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 

عندي ملاحظة بسيطة اليس اقرب palindrome للعد 123 هو 121 وليس 222 !\

 

أخي الكريم أنا قلت أقرب palindrom >=العدد

 

الpalindrome  الناتج لا يجوز أن يكون أصغر من العدد إما يساويه أو أقرب palindrom أكبر منه

 

لذا الpalindrome الأّقرب ل 123 هو 222

 

معذرة أنا لم أرى سؤالك عن 12345

 

الجواب هو: 13331

 

أرجو أن تكون قد لا حضت القانون

 

إكتشاف القانون هو الأساس عليك التفكير فيه قبل الشروع في صناعة البرنامج

أدخل على الرابط الموجود تحت بالتوفيع الخاص بي

 

ستجد برنامج الأرقام المتقاطعة و مدونتي الخاصة

 

أرجو أن تستفيد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكلتي  اني  فكرت  في  ايجاد  شكل  من  الارقام    :P   و  ليس  قانون  رياضي   !!!

 

فبالرغم  من  انك  كتبت   ان  الناتج  لابد  ان  يكون  اصغر  او  يساوي    انا    اوجدته   اكبر  بكثير   :haha: هذه  عاقبة   العجلة 

    

يبدو  ان  الموضوع  يحتاج  لتفكير  :huh:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 

فبالرغم  من  انك  كتبت   ان  الناتج  لابد  ان  يكون  اصغر  او  يساوي    انا    اوجدته   اكبر  بكثير   :haha: هذه  عاقبة   العجلة

أنت لا تزال مستعجل

 

أكبر أو يساوي وليس أقل أو يساوي

 

;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل هذا صحيح؟

#!/usr/bin/env pythondef isEven(n):    if len(n) %2 == 0:        return True    return Falsedef rounding(a):    i = 0    n = []    while i < len(a):        if (a[i] == a[-i-1]):            pass        else:            n.append(a[i])        i += 1         if len(n) > 0:        j = 0        while j < len(n):            x = max(n[j], n[-j -1])            n[j] = x            j += 1        return n        a = input('value: ')if isEven(a):    print(''.join(rounding(a)))else:    i = len(a) // 2 # Median Value    u = []    for z in a:        u.append(z)    c = u[i]    del(u[i])    a = u    a = rounding(a)    a.insert(i, c)    print(''.join(a))# END            
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

برنامجك لا يعمل

 

أخي أما لما قلت أت المدخلات أرقام قصدت التسهبل

 

حاول صنعه بالأرقام و متي تفعل ذلك حالو بالنصوص

 

الحل عندى سأضعه إن أردت

 

لكن أرجة أن تجده أنت أوله

 

هذا الأسبوع عندي إمتحانات نتلقي الأسبوع القادم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نقلت  الكلام  بخطأه  كما  هو  من  الموضوع  :P  انتبهت  بعد  ما  كتبت  :wacko:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذا الحل ان شاء الله يكون صحيح

سواء ادخل المستخدم كلمة او عدد :)

#!/usr/bin/env pythondef isEven(n):    if len(n) %2 == 0:        return True    return Falsedef rounding(w):    n = []    for i in w:        n.append(i)    i, j = 0, 0    result = []    while i < len(n):        if n[i] == n[-i-1]:            j += 1        else:            maxValue = max(n[i], n[-i -1])            result.append(maxValue)        i += 1    if j == len(w):        result = n    return resultdef outPut(w):    if isEven(w):        return rounding(w)    n = []    for i in w:        n.append(i)    medianValue = len(w) // 2    popValue = n.pop(medianValue)        n = rounding(n)    n.insert(medianValue, popValue)    return nword = input('Enter something: ')print(''.join(outPut(word)))
تم تعديل بواسطه m ahmed
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

محاولات جيدة أخي

 

لكن البرنامج لا يعطي نتائج صحيحة

 

جربت بادخال الرقم 123

 

فطبع لي 322  بينما الحل الصحيح هو 222  ليس أدرى لماذا لم تتمكن من معرفة أن البرنامج يعطي نتائج خاطئة

 

عليك أن تجربه أولا و ترى إن كان يعمل أو لا

 

المشكلة في برنامجك أنك تختار أكبر قيمة و تضعها في طلتا الطرفين

 

و كما قلت لك عليك أن تجد القانون(الصيغة الرياضية ) فذلك سيساعدك كثير

 

سأساعده في الصيغة (إذا كان الشطر الأعلا من الرقم أكبر من معكوس الشطر الثاني نجعل الثاني يساوي معكوس الشطر الأول و إن كان الشكر الثاني أكبر نضيف للشطر الأول واحد و نجعل الشطر الثاني يساوي معكوس(الشطر الأول الجديد))

 

البرنامج يقرأ عدد من عند المستخدم

 

إذا كان طول العدد فردي مثلا 1230456

 

الأن نقسم العدد لقسمين و تضع كل قسم في متغير

ص=123   ض=456

نعكس الشطر الثاني   ض=654

الأن نقارن

 

نلاحظ أن الشطر الأول أكير لذا نضيف له واحد و نجعل الشطر الثاني يساوي معكوسه

ص=124   ض=421

 

الأن نغير في العدد الأصلي

فيصبح 1240421

 

أرجو أن تكون الفكرة قد وصلت

 

لقد استعملت متغيرات بالعربية حتي لا أضطر إلا تغيير لغة الكتابة في كل مرة

 

الأن قم ببرمجة دالة لعكس الأرقام

 

و قم ببرمجة من جديد

 

في انتظار مشاركتك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا اخي البرنامج عند ادخال 123 سيطبع 323

انا اختبرت البرنامج اكثر من مرة

صحيح ان الكود الذي كتبه طويل بعض الشي بالرغم انني متأكد ان اللغز سينحل في اسطر قليلة لكن هذا اللي قدرت عليه :)

سأحاول مرة اخرى ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
السلام عليكم 

تفضل حل على السريع: The pythonist way

 



s = "1230456"
def test_palin(s):
if s == s[::-1]:
print s, ' is palindrom'
else:
lgth = len(s)
if lgth%2 == 1:
p1 = int(s[:lgth/2])
p2 = int(s[lgth/2 +1:][::-1])
res = p2 > p1 and str(p1+1) + s[lgth/2] + str(p1+1)[::-1] or str(p1) + s[lgth/2] + str(p1)[::-1]
print res
else:
p1 = int(s[:lgth/2 ])
p2 = int(s[lgth/2 :][::-1])
res = p2 > p1 and str(p1+1) + str(p1+1)[::-1] or str(p1) + str(p1)[::-1]
print res

test_palin(s)



 

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ممتاز أخي   med reda   لقد طبقت تحليلى للتمرين

 

البرنامج يعمل كما أنه بسيط و بعدد أقل من الأسطر

 

أح m ahmed أحيانا نحل المشكلة بشكل معقدة بينما يوجد حلول أبسط بكثر

 

يمكننا تبسيط كود الاخ med reda  لنجعله أبسط و بأقل عدد من الأسطر,

 

أخ m ahmed لقد سبق و وعدتك بأن أكتب برنامج يتأكد إن كان العدد palindrom أم لا بست أسطر فقط و ها هو البرنامج

def test_palin(s):        s=str(s)        if s[:len(s)//2]!= s[len(s)//2+len(s)%2:][::-1]:            return 'not a palidrome'        else:            return 'palindrom'

أرجو منك أن تصنع برنامج مماثل لبرنامجي كحل للتمرين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

يمكن كتابته في سطر واحد

test = lambda x : str(x) == str(x)[::-1] and 'palin' or 'not palin'

وعند استخدامها يجب تطبيق الامر التالي

test(s)

علما ان s به العدد المراد التحقق منه

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أنت ماهر جدا أخي

 

الكلمة المحجوزة lambda تستعمل لتعريف الدوال في سطر واحد

 

المهم برنامج التعرف على إن كان العدد المدخل palindrome أو لا أصبح مكون من سطر واحد فقط

 

الآن إن أمكن أن نقلل عدد الأسطر في حل التمرين

 

التمرين قد تم حله لكن تقليل عدد الأسكر من بين المهارات الواجب تعلمها

 

فبذلك نقلل وقت التنفيذ و استهلاك الذاكرة (لكن ليس دائما عدد أقل من الأسطر=عدد أقل من الذاكرة و الوقت)

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
 
3:التأكد من أن عددين متساويين أو لا،من دون استعمال رمز المساوات '==':
 
A=input(' ')

B=input(' ')

if A>B:

    print 'A!=B'

else:

    if A<B:

        print 'A!=B'

    else:

        print 'A==B'

equal= lambda x,y : not x!=y
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

#!/usr/bin/env python

def test_palin(s):

s=str(s)

if s[:len(s)//2]!= s[len(s)//2+len(s)%2:][::-1]:

return 'not a palidrome'

else:

return 'palindrom'

########## في أسطر أقل ##########

# 1

def test_palin(s):

s=str(s)

if s[:len(s)//2]!= s[len(s)//2+len(s)%2:][::-1]:

return 'not a palidrome'

return 'palindrom'

# 2

# True => Palindrome

# False => Not Palindrome

def test_palin(s):

return str(s)[:] == str(s)[::-1]

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

التعرف على إن كان العدد palindrome

 

تمت كتابه في سكر واحد فقط

 

لقد قلت أن نقلل عدد أسكر حل التمرين و ليس التعرف على إن كان بلينروم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
يمكن ايضا ان اختصر حل التمرين كاملا في سطر اوسطرين

لكن لن يكون مفهوما الا من طرف الكمبيوتر ههههه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .