Tracks
/
Ruby
Ruby
/
Übungen
/
Vogelzählung
Vogelzählung

Vogelzählung

Lernübung

Einführung

Arrays

In Ruby sind Arrays geordnete, ganzzahlig indizierte Sammlungen beliebiger Objekte. Die Indizierung von Arrays beginnt bei 0. Ein negativer Index wird relativ zum Ende des Arrays interpretiert. Ein Index von -1 gibt zum Beispiel das letzte Element des Arrays an, -2 das vorletzte Element und so weiter.

Arrays erstellen

Arrays werden normalerweise mit der []-Notation erstellt. Sie können Objekte ganz unterschiedlicher Typen enthalten.

array = [1, "two", 3.0]

Zugriff auf Elemente

Mit der Methode #[] kannst du Elemente eines Arrays über ihre Indizes abrufen. Sie gibt das Element am angegebenen Index zurück oder ein Teilarray, das beim Startindex beginnt und über eine bestimmte Länge weitergeht. Negative Indizes zählen vom Ende des Arrays rückwärts.

a = [ "a", "b", "c", "d", "e" ]

a[2]       #=> "c"
a[6]       #=> nil
a[1, 3]    #=> [ "b", "c", "d" ]

a[-1]      #=> "e"
a[-2]      #=> "d"
a[-3, 2]   #=> ["c", "d"]

Hilfsmethoden

Arrays haben viele nützliche Hilfsmethoden. Hier sind einige der gebräuchlichsten:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.size      #=> 8
fibonacci.sum       #=> 33
fibonacci.reverse   #=> [13, 8, 5, 3, 2, 1, 1, 0]

Aufzählung

Anstatt mit Schleifen durch Sammlungen zu iterieren, verwenden wir in Ruby die Aufzählung.

Beim Aufzählen gehst du eine Sammlung (in diesem Fall ein Array) durch und führst für jedes Objekt eine Aktion aus. Die Aufzählung ist ein zentrales Konzept in Ruby und wird unter anderem zum Sortieren, Gruppieren, Abbilden und Reduzieren verwendet.

Eine Aufzählung, die jedes Wort in einem Array ausgibt, sieht so aus:

words = ["the", "cat", "sat"]
words.each do |word|
  puts word
end

# Output:
# the
# cat
# sat

In diesem Beispiel haben wir die Methode .each auf unserem Array aufgerufen und einen Block übergeben, der einen Parameter (word) entgegennimmt und ihn ausgibt.

Wir schauen uns Blöcke später im Track noch viel genauer an, aber für den Moment kannst du sie dir als anonyme Funktionen vorstellen, die null oder mehr Argumente entgegennehmen können. Sie können mit der do...end-Syntax (oben) oder der {}-Syntax (unten) definiert werden.

Hier sind einige weitere Beispiele für Array-Methoden, die Blöcke verwenden:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.count  { |number| number == 1 }   #=> 2
fibonacci.any?   { |number| number == 6 }   #=> false
fibonacci.select { |number| number.odd? }   #=> [1, 1, 3, 5, 13]
fibonacci.all?   { |number| number < 20 }   #=> true
fibonacci.map    { |number| number * 2  }   #=> [0, 2, 2, 4, 6, 10, 16, 26]

Anleitung

Du bist ein begeisterter Vogelbeobachter und notierst, wie viele Vögel in den letzten sieben Tagen deinen Garten besucht haben.

Du hast fünf Aufgaben, die sich alle mit der Anzahl der Vögel beschäftigen, die deinen Garten besucht haben.

1. Prüfe, wie die Zählungen letzte Woche waren

Zum Vergleich bewahrst du immer eine Kopie der Zählungen der letzten Woche in der Nähe auf, und zwar: 0, 2, 5, 3, 7, 8 und 4. Implementiere die Methode BirdCount.last_week, die die Zählungen der letzten Woche zurückgibt:

BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]

2. Prüfe, wie viele Vögel gestern zu Besuch waren

Implementiere die Methode BirdCount#yesterday, die zurückgibt, wie viele Vögel gestern deinen Garten besucht haben. Die Vogelzählungen sind nach Tagen geordnet, wobei das erste Element die Zählung des ältesten Tages ist und das letzte Element die Zählung von heute.

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4

3. Berechne die Gesamtzahl der zu Besuch gekommenen Vögel

Implementiere die Methode BirdCount#total, die die Gesamtzahl der Vögel zurückgibt, die deinen Garten besucht haben:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19

4. Berechne die Anzahl der geschäftigen Tage

Manche Tage sind geschäftiger als andere. Ein geschäftiger Tag ist ein Tag, an dem fünf oder mehr Vögel deinen Garten besucht haben. Implementiere die Methode BirdCount#busy_days, die die Anzahl der geschäftigen Tage zurückgibt:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2

5. Prüfe, ob es einen Tag ohne besuchende Vögel gab

Implementiere die Methode BirdCount#day_without_birds?, die true zurückgibt, wenn es einen Tag gab, an dem null Vögel den Garten besucht haben; andernfalls gibt sie false zurück:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Ruby Exercism

Bereit, mit Vogelzählung zu starten?

Melde dich bei Exercism an, um Ruby mit 21 Konzepte121 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.