Kelime Analitiği
Coddy'nin Ruby Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 54 / 56.
Dizeleri, hash'leri, Hash.new(0) yapısını ve Enumerable metotlarını aynı anda kullanan bağımsız bir meydan okuma.
Görev
OrtaGirdi olarak tek bir satır, bir cümle okuyun. Bunu analiz edin ve üç satır yazdırın:
- Benzersiz kelimelerin sayısı (büyük/küçük harf duyarsız, noktalama işaretleri temizlenmiş). Tekrarlanan kelimeler birer kez sayılır.
- Birden fazla kez geçen tekrarlanan kelimeler, alfabetik olarak sıralanmış ve
,ile birleştirilmiş. Hiç yoksa,(none)yazdırın. - Palindrom kelimeler, yani ileri ve geri okunuşu aynı olan kelimeler, uzunluk ≥ 2, alfabetik olarak sıralanmış ve
,ile birleştirilmiş. Hiç yoksa,(none)yazdırın.
İşlemeden önce her kelimeden .,!?:;"() karakterlerini temizleyin. Karşılaştırma için her şeyi küçük harfe çevirin.
Madam saw a racecar. Dad said hello hello to mom. girdisi için çıktı şöyledir:
9
hello
dad, madam, mom, racecarKopya kağıdı
Kelime frekanslarını saymak için Hash.new(0) kullanın, ardından filtrelemek ve sıralamak için Enumerable metotlarını kullanın:
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 }.sortBir koleksiyon boş olduğunda (none) yazdırın:
puts repeated.empty? ? "(none)" : repeated.join(", ")Kendin dene
input = gets.chomp
# YAPILACAKLAR: ayır, noktalama işaretlerini temizle, küçük harfe çevir, sonra şunları yazdır:
# benzersiz kelime sayısı, tekrarlanan kelimeler, palindromlar (uzunluk >= 2)
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Derinlemesine Stringler
String Metotlarına Genel BakışString InterpolationStringler Üzerinde GezinmeSplit ve JoinÖzet - String Weaver4Bloklar, Procs ve Lambdalar
Blok Nedir?do..end ve Süslü Parantezleryield Anahtar KelimesiBlok ParametreleriProcs ve LambdalarÖzet - Özel İteratör7Hashes Bölüm 2
Varsayılan Değerlerle Hash.newHash Yapıları Üzerinde Yinelemeİç İçe Hash YapılarıBirleştirme ve DönüştürmeÖzet - Frekans Sayacı10Proje - Öğrenci Kayıtları
Projeye Genel BakışÖğrenci Ekle5Enumerable Gücü
Select ve RejectMap ZincirlemeReduce / Injectcount, all?, any?, none?group_by ve partitionsort_by, min_by, max_byÖzet - Data Pipeline8İleri Seviye Karar Yapıları
Sınıflar ve Regex ile CaseÇok Değerli whenTernary OperatörüSatır İçi if / unlessÖzet - Not Sınıflandırıcı