Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تحليل الكلمات

جزء من قسم المنطق وتدفق العمليات في رحلة Ruby على Coddy — الدرس 54 من 56.

تحدٍ مستقل يجمع بين السلاسل النصية (strings)، وجداول التجزئة (hashes)، و Hash.new(0)، ودوال Enumerable، كل ذلك في آن واحد.

challenge icon

التحدي

متوسط

اقرأ سطراً واحداً من المدخلات، وهو عبارة عن جملة. قم بتحليلها واطبع ثلاثة أسطر:

  1. عدد الكلمات الفريدة (غير حساسة لحالة الأحرف، مع إزالة علامات الترقيم). الكلمات المتكررة تُحسب مرة واحدة فقط.
  2. الكلمات المتكررة (تلك التي تظهر أكثر من مرة)، مرتبة أبجدياً، ومدمجة بـ , . إذا لم يوجد أي منها، اطبع (none).
  3. كلمات الباليندرووم (Palindrome)، وهي الكلمات التي تُقرأ بنفس الطريقة من الأمام والخلف، بطول ≥ 2، مرتبة أبجدياً، ومدمجة بـ , . إذا لم يوجد أي منها، اطبع (none).

قم بإزالة الأحرف .,!?:;"() من كل كلمة قبل المعالجة. قم بتحويل كل شيء إلى أحرف صغيرة (Lowercase) للمقارنة.

للمدخل Madam saw a racecar. Dad said hello hello to mom.، يكون المخرج:

9
hello
dad, madam, mom, racecar

ورقة مرجعية

استخدم Hash.new(0) لحساب ترددات الكلمات، ثم استخدم طرق Enumerable للتصفية والفرز:

words = line.gsub(/[.,!?:;"()]/, '').downcase.split
freq = Hash.new(0)
words.each { |w| freq[w] += 1 }

unique = freq.keys
repeated = freq.select { |_, v| v > 1 }.keys.sort
palindromes = unique.select { |w| w.length >= 2 && w == w.reverse }.sort

اطبع (none) عندما تكون المجموعة فارغة:

puts repeated.empty? ? "(none)" : repeated.join(", ")

جرّب بنفسك

input = gets.chomp

# مهام: التقسيم، إزالة علامات الترقيم، تحويل للأحرف الصغيرة، ثم الطباعة:
#   العدد الفريد، الكلمات المتكررة، الكلمات المتناظرة (الطول >= 2)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفق العمليات