Tracks
/
Clojure
Clojure
/
Übungen
/
Vogelbeobachter
Vogelbeobachter

Vogelbeobachter

Lernübung

Einführung

Ein vector in Clojure ist eine sequenzielle, indizierte, unveränderliche Sammlung von null oder mehr Werten. Das heißt: Sobald ein Vektor erstellt wurde, kann er nicht mehr geändert werden. Funktionen, die auf Vektoren arbeiten, geben einen neuen Vektor zurück, während der ursprüngliche Vektor unverändert bleibt. Die Werte in einem Vektor können unterschiedliche Typen haben. Vektoren kannst du so definieren:

(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])

Elemente kannst du über einen Index aus einem Vektor abrufen. Clojure-Vektoren sind nullbasiert, das heißt, der Index des ersten Elements ist immer null:

(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]

Der ursprüngliche Vektor bleibt unverändert:

numbers
;;=> [2 3 5]

Um den aktualisierten Wert zu behalten, musst du ihn weitergeben oder in einer Var festhalten:

(def updated-numbers
  (assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9

Anleitung

Du bist ein begeisterter Vogelbeobachter und behältst im Blick, wie viele Vögel in den letzten sieben Tagen deinen Garten besucht haben.

Du hast sechs Aufgaben, die sich alle mit der Anzahl der Vögel befassen, die deinen Garten besucht haben.

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

Zu Vergleichszwecken hast du immer eine Kopie der Zählungen der letzten Woche in der Nähe, und zwar: 0, 2, 5, 3, 7, 8 und 4. Erstelle einen Vektor, der die Zählungen der letzten Woche enthält:

last-week
;;=> [0 2 5 3 7 8 4]

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

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

(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1

3. Erhöhe die heutige Zählung

Implementiere die Funktion inc-bird, um die heutige Zählung zu erhöhen:

(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]

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

Implementiere die Prädikatfunktion day-without-birds?, die true zurückgibt, wenn es einen Tag gab, an dem null Vögel den Garten besucht haben; andernfalls gib false zurück:

(day-without-birds? birds-per-day)
;;=> true

5. Berechne die Anzahl der Vögel, die an den ersten Tagen zu Besuch waren

Implementiere die Funktion n-days-count, die die Anzahl der Vögel zurückgibt, die deinen Garten seit Beginn der Woche besucht haben, aber begrenze die Zählung auf die angegebene Anzahl von Tagen ab Beginn der Woche.

(n-days-count birds-per-day 4)
;;=> 14

6. Berechne die Anzahl der geschäftigen Tage

Manche Tage sind geschäftiger als andere. Ein geschäftiger Tag ist einer, an dem fünf oder mehr Vögel deinen Garten besucht haben. Implementiere die Funktion busy-days, die die Anzahl der geschäftigen Tage zurückgibt:

(busy-days birds-per-day)
;;=> 2

7. Prüfe auf eine seltsame Woche

Im letzten Jahr hast du festgestellt, dass einige Wochen demselben seltsamen Muster folgen, bei dem die Zählungen zwischen einem und null besuchenden Vögeln wechseln. Implementiere die Funktion odd-week?, die true zurückgibt, wenn das Vogelzählungsmuster dieser Woche dem seltsamen Muster entspricht:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Clojure Exercism

Bereit, mit Vogelbeobachter zu starten?

Melde dich bei Exercism an, um Clojure mit 12 Konzepte105 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.