Hamming

Hamming

سهل

مقدمة

يتكوّن جسمك من خلايا تحتوي على DNA. تبلى هذه الخلايا بانتظام وتحتاج إلى استبدال، وهو ما تحققه بالانقسام إلى خلايا وليدة. في الواقع، يمرّ جسم الإنسان العادي بنحو 10 كوادريليون انقسام خلوي خلال حياته!

وعندما تنقسم الخلايا، يتضاعف الـ DNA فيها أيضًا. وأحيانًا تحدث أخطاء أثناء هذه العملية، فتُشفَّر قطع منفردة من الـ DNA بمعلومات غير صحيحة. وإذا قارنّا بين شريطين من الـ DNA وعددنا الفروق بينهما، أمكننا أن نرى كم من الأخطاء قد وقع. ويُعرف هذا باسم "Hamming distance".

إن مسافة "Hamming distance" مفيدة في مجالات علمية كثيرة، لا في علم الأحياء فحسب، لذا فهي عبارة جيدة أن تألفها :)

التعليمات

احسب مسافة هامينغ بين سلسلتَي DNA نصيتين.

نقرأ DNA باستخدام الحروف C وA وG وT. قد تبدو سلسلتان نصيتان هكذا:

GAGCCTACTAACGGGAT
CATCGTAATGACGGCCT
^ ^ ^  ^ ^    ^^

بينهما 7 اختلافات، ومن ثَمّ فإن مسافة هامينغ تساوي 7.

ملاحظات التنفيذ

لا تُعرَّف مسافة هامينغ إلا لسلاسل نصية متساوية الطول، لذا لا ينبغي أن تنجح محاولة حسابها بين سلسلتين نصيتين مختلفتين في الطول.

رسائل الاستثناء

أحيانًا يكون من الضروري رفع استثناء. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى تشير إلى مصدر الخطأ. فهذا يجعل الكود أكثر قابلية للقراءة، ويساعد كثيرًا في تصحيح الأخطاء. وفي الحالات التي تعرف فيها أن مصدر الخطأ سيكون من نوع معيّن، يمكنك اختيار رفع أحد أنواع الأخطاء المدمجة، لكن يجب أن تُضمّن معه رسالة ذات معنى على أي حال.

يتطلب هذا التمرين تحديدًا أن تستخدم عبارة raise من أجل «إطلاق» ValueError عندما لا تكون الخيوط التي تُفحص متساوية في الطول. لن تنجح الاختبارات إلا إذا استخدمت raise وexception معًا، وأضفت معه رسالة.

لرفع ValueError مع رسالة، اكتب الرسالة كوسيط لنوع exception:

# When the sequences being passed are not the same length.
raise ValueError("Strands must be of equal length.")
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء Hamming؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.