Tracks
/
Clojure
Clojure
/
Übungen
/
Annalyns Infiltration
Annalyns Infiltration

Annalyns Infiltration

Lernübung

Einführung

Boolesche Werte in Clojure werden durch true oder false dargestellt.

Prädikatfunktionen (Funktionen, die einen booleschen Wert zurückgeben) enden üblicherweise mit einem Fragezeichen (?), aber das ist nur eine Konvention.

Die Kernbibliothek enthält Funktionen für logische Operatoren wie not, and und or.

Anleitung

In dieser Übung implementierst du die Quest-Logik für ein neues Rollenspiel, das ein Freund von dir entwickelt. Die Hauptfigur des Spiels ist Annalyn, ein tapferes Mädchen mit einem wilden und treuen Hund. Doch dann nimmt das Unheil seinen Lauf: Ihr bester Freund wurde entführt, während er im Wald Beeren suchte. Annalyn wird versuchen, ihren Freund zu finden und zu befreien. Auf dieser Quest kann sie ihren Hund mitnehmen, wenn sie möchte.

Nachdem sie eine Weile der Spur gefolgt ist, entdeckt Annalyn das Lager, in dem ihr Freund gefangen gehalten wird. Es stellt sich heraus, dass es zwei Entführer gibt: einen mächtigen Ritter und einen gerissenen Bogenschützen.

Nachdem Annalyn die Entführer gefunden hat, überlegt sie, welche der folgenden Aktionen sie ausführen kann:

  • Schneller Angriff: Ein schneller Angriff ist möglich, wenn der Ritter schläft, denn er braucht Zeit, um seine Rüstung anzulegen, und ist dadurch verwundbar.
  • Ausspionieren: Die Gruppe kann ausspioniert werden, wenn mindestens einer von ihnen wach ist. Andernfalls ist Ausspionieren Zeitverschwendung.
  • Gefangenen signalisieren: Der Gefangene kann mithilfe von Vogelstimmen signalisiert werden, wenn der Gefangene wach ist und der Bogenschütze schläft. Bogenschützen sind darin ausgebildet, mit Vogelstimmen zu signalisieren, und könnten die Nachricht abfangen, wenn sie wach sind.
  • Gefangenen befreien: Annalyn kann versuchen, sich ins Lager zu schleichen, um den Gefangenen zu befreien. Das ist riskant und kann nur auf eine von zwei Arten gelingen:
    • Wenn Annalyn ihren Hund dabei hat, kann sie den Gefangenen retten, wenn der Bogenschütze schläft. Der Ritter hat Angst vor dem Hund, und der Bogenschütze hat keine Zeit, sich bereit zu machen, bevor Annalyn und der Gefangene entkommen können.
    • Wenn Annalyn ihren Hund nicht dabei hat, müssen sie und der Gefangene sehr vorsichtig sein! Annalyn kann den Gefangenen befreien, wenn der Gefangene wach ist und der Ritter und der Bogenschütze beide schlafen. Wenn der Gefangene jedoch schläft, kann er nicht gerettet werden: Er würde durch Annalyns plötzliches Auftauchen erschrecken und den Ritter und den Bogenschützen aufwecken.

Du hast vier Aufgaben: Implementiere die Logik, mit der sich bestimmen lässt, ob die oben genannten Aktionen verfügbar sind, und zwar abhängig vom Zustand der drei Figuren im Wald und davon, ob Annalyns Hund dabei ist oder nicht.

1. Prüfen, ob ein schneller Angriff möglich ist

Implementiere die Funktion can-fast-attack?, die einen booleschen Wert entgegennimmt, der angibt, ob der Ritter wach ist. Diese Funktion gibt true zurück, wenn ein schneller Angriff aufgrund des Zustands des Ritters möglich ist. Andernfalls gibt sie false zurück:

(def knight-awake? true)

(can-fast-attack? knight-awake?)
;;=> false

2. Prüfen, ob die Gruppe ausspioniert werden kann

Implementiere die Funktion can-spy?, die drei boolesche Werte entgegennimmt, die angeben, ob der Ritter, der Bogenschütze bzw. der Gefangene wach ist. Die Funktion gibt true zurück, wenn die Gruppe aufgrund des Zustands der drei Figuren ausspioniert werden kann. Andernfalls gibt sie false zurück:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)

(can-spy? knight-awake? archer-awake? prisoner-awake?)
;;=> true

3. Prüfen, ob der Gefangene signalisiert werden kann

Implementiere die Funktion can-signal-prisoner?, die zwei boolesche Werte entgegennimmt, die angeben, ob der Bogenschütze bzw. der Gefangene wach ist. Die Funktion gibt true zurück, wenn der Gefangene aufgrund des Zustands der beiden Figuren signalisiert werden kann. Andernfalls gibt sie false zurück:

(def archer-awake? false)
(def prisoner-awake? true)

(can-signal-prisoner? archer-awake? prisoner-awake?)
;;=> true

4. Prüfen, ob der Gefangene befreit werden kann

Implementiere die Funktion can-free-prisoner?, die vier boolesche Werte entgegennimmt. Die ersten drei Parameter geben an, ob der Ritter, der Bogenschütze bzw. der Gefangene wach ist. Der letzte Parameter gibt an, ob Annalyns Hund dabei ist. Die Funktion gibt true zurück, wenn der Gefangene befreit werden kann, und zwar abhängig vom Zustand der drei Figuren und davon, ob Annalyns Hund dabei ist. Andernfalls gibt sie false zurück:

(def knight-awake? false)
(def archer-awake? true)
(def prisoner-awake? false)
(def dog-present? false)

(can-free-prisoner? knight-awake? archer-awake? prisoner-awake? dog-present?)
;;=> false
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Clojure Exercism

Bereit, mit Annalyns Infiltration zu starten?

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