Wort-Analyse
Teil des Abschnitts Logik & Programmfluss der Ruby-Journey von Coddy — Lektion 54 von 56.
Eine eigenständige Herausforderung, die Strings, Hashes, Hash.new(0) und Enumerable-Methoden gleichzeitig beansprucht.
Aufgabe
MittelLies eine einzelne Eingabezeile, einen Satz. Analysiere diesen und gib drei Zeilen aus:
- Die Anzahl der einzigartigen Wörter (Groß-/Kleinschreibung wird ignoriert, Satzzeichen werden entfernt). Wiederholte Wörter werden jeweils nur einmal gezählt.
- Die wiederholten Wörter (die mehr als einmal vorkommen), alphabetisch sortiert und mit
,verbunden. Wenn keine vorhanden sind, gib(none)aus. - Die Palindrom-Wörter, also Wörter, die vorwärts und rückwärts gleich gelesen werden, Länge ≥ 2, alphabetisch sortiert und mit
,verbunden. Wenn keine vorhanden sind, gib(none)aus.
Entferne die Zeichen .,!?:;"() von jedem Wort vor der Verarbeitung. Wandle alles für den Vergleich in Kleinbuchstaben um.
Für die Eingabe Madam saw a racecar. Dad said hello hello to mom. lautet die Ausgabe:
9
hello
dad, madam, mom, racecarSpickzettel
Verwenden Sie Hash.new(0), um Wortfrequenzen zu zählen, und nutzen Sie dann Enumerable-Methoden zum Filtern und Sortieren:
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 }.sortGeben Sie (none) aus, wenn eine Sammlung leer ist:
puts repeated.empty? ? "(none)" : repeated.join(", ")Probier es selbst
input = gets.chomp
# TODO: aufteilen, Satzzeichen entfernen, kleinschreiben, dann ausgeben:
# Anzahl der eindeutigen Wörter, wiederholte Wörter, Palindrome (Länge >= 2)
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Programmfluss
1Strings im Detail
String-Methoden im ÜberblickString-InterpolationIterieren über StringsSplit und JoinRückblick – String Weaver4Blöcke, Procs & Lambdas
Was ist ein Block?do..end vs. geschweifte KlammernDas yield-SchlüsselwortBlock-ParameterProcs und LambdasZusammenfassung – Eigener Iterator7Hashes Teil 2
Hash.new mit StandardwertenIterieren über HashesVerschachtelte HashesZusammenführen und TransformierenRückblick – Häufigkeitszähler10Projekt - Studentenverwaltung
ProjektübersichtStudent hinzufügen5Enumerable-Kraftpaket
Select und RejectMap-VerkettungReduce / Injectcount, all?, any?, none?group_by und partitionsort_by, min_by, max_byZusammenfassung – Data Pipeline8Fortgeschrittene Entscheidungslogik
Case mit Klassen & RegexMulti-Value whenTernärer OperatorInline if / unlessRückblick – Noten-Klassifizierer