الاختلاف بين الشفرتين يعود إلى الطريقة التي يتعاملان بها مع تحديد أطول كلمة في السلسلة المعطاة.
الشفرة الأولى:
rubydef longest_word(sentence)
words = sentence.split(" ")
longest_word = nil
word_idx = 0
while word_idx < words.length
current_word = words[word_idx]
if longest_word == nil
longest_word = current_word
elsif longest_word.length < current_word.length
longest_word = current_word
end
word_idx += 1
end
return longest_word
end
تقوم بتقسيم السلسلة إلى كلمات فردية باستخدام الفراغ كمحدد، ثم تقوم بمقارنة طول الكلمات واختيار الكلمة الأطول.
أما الشفرة الثانية:
rubydef LongestWord(sen)
arr = sen.split.map do |w|
/[a-zA-Z0-9\s]+/.match(w)
end
longest = arr.max_by do |w|
w.to_s.length
end
return longest
end
فهي تقوم بنفس العملية تقريباً، ولكن بطريقة أكثر تعقيداً. تقوم أولاً بتقسيم السلسلة إلى كلمات باستخدام الفراغ، ثم تستخدم تعبيرًا منتظمًا للتأكد من أن كل كلمة تحتوي فقط على أحرف وأرقام وفراغات، ثم تختار الكلمة الأطول باستخدام دالة max_by
.
الاختلاف الرئيسي بينهما يكمن في الطريقة التي يتعاملان بها مع التحقق من صحة الكلمات. الشفرة الثانية تقوم بالتحقق من صحة الكلمات باستخدام تعبير منتظم بينما الشفرة الأولى لا تقوم بذلك. قد يكون هذا هو السبب الرئيسي وراء الاختلاف في النتائج التي تحصل عليها.
المزيد من المعلومات
بالطبع، دعني أوضح المزيد حول الاختلافات بين الشفرتين وكيفية تأثير ذلك على النتائج التي تحصل عليها.
الشفرة الأولى تعتمد على فكرة بسيطة للعثور على أطول كلمة في الجملة. تقوم بتقسيم الجملة إلى كلمات عن طريق تقسيم السلسلة بناءً على الفراغات ومن ثم تحليل كل كلمة على حدة. ثم تقارن طول كل كلمة وتحتفظ بالأطول.
الشفرة الثانية، على الجانب الآخر، تستخدم تعبيرًا منتظمًا للتأكد من أن الكلمات تحتوي فقط على الأحرف والأرقام والفراغات. هذا يعني أنها ستقوم بتجاهل أي رموز أو رموز ترقيم أو أي نوع آخر من الرموز في النص، وهذا يؤثر على النتيجة التي تحصل عليها.
لذلك، إذا كانت الجملة تحتوي على أحرف غير أبجدية أو أرقام، فقد تؤدي الشفرة الثانية إلى نتيجة غير متوقعة، بينما تعتمد الشفرة الأولى فقط على طول الكلمات دون التحقق من صحتها.