Tracks
/
Elixir
Elixir
/
Übungen
/
Logbuch des Kapitäns
Logbuch des Kapitäns

Logbuch des Kapitäns

Lernübung

Einführung

Zufall

In Elixir verwenden wir Enum.random, um ein zufälliges Element aus einer aufzählbaren Datenstruktur (z. B. Liste, Range) auszuwählen. Diese Funktion wählt ein einzelnes Element aus, wobei jedes Element mit gleicher Wahrscheinlichkeit gewählt wird.

Elixir hat keine eigenen Funktionen, um eine zufällige Gleitkommazahl auszuwählen. Dafür müssen wir direkt Erlang verwenden.

Erlang-Bibliotheken

Elixir-Code läuft in der virtuellen Maschine BEAM. BEAM ist Teil des Erlang Run-Time Systems. Elixir wurde von Erlang inspiriert und teilt dessen Laufzeitumgebung, daher bietet Elixir eine hervorragende Interoperabilität mit Erlang-Bibliotheken. Das bedeutet, dass Elixir-Entwickler Erlang-Bibliotheken direkt in ihrem Elixir-Code verwenden können. In der Elixir-Community wird sogar davon abgeraten, Elixir-Bibliotheken für Funktionalität zu schreiben, die Erlang-Bibliotheken bereits bereitstellen.

Daher ist bestimmte Funktionalität, wie mathematische Operationen oder Timer-Funktionen, in Elixir nur über Erlang verfügbar.

Erlangs Standardbibliothek steht in unserem Elixir-Code ohne zusätzliche Schritte zur Verfügung.

Erlang-Funktionen lassen sich genauso aufrufen wie Elixir-Funktionen, mit einem kleinen Unterschied. Erlang-Modulnamen sind Atome in snake_case. Um zum Beispiel die Erlang-Funktion pi/0 aus dem math-Modul aufzurufen, schreibst du:

:math.pi()
# => 3.141592653589793

Die am häufigsten verwendeten Erlang-Funktionen, die kein Äquivalent in Elixir haben, sind:

  • :timer.sleep/1, die einen Prozess für die angegebene Anzahl von Millisekunden anhält.
  • :rand.uniform/0, die eine zufällige Gleitkommazahl x erzeugt, wobei 0.0 <= x < 1.0 gilt.
  • :io_lib.format/2, die eine Formatierung im C-Stil (mit Steuersequenzen) bietet. Mit dieser Funktion könnten wir zum Beispiel eine Ganzzahl in jeder Basis zwischen 2 und 36 ausgeben oder eine Gleitkommazahl mit der gewünschten Genauigkeit formatieren. Beachte, dass diese Funktion, wie viele Erlang-Funktionen, eine Charlist zurückgibt.
  • Das math-Modul, das mathematische Funktionen wie sin/1, cos/1, log2/1, log10/1, pow/2 und mehr bietet.

Um die Standardbibliothek von Erlang zu entdecken, schau dir das STDLIB-Referenzhandbuch an.

Anleitung

Mary ist ein großer Fan der Fernsehserie Star Trek: The Next Generation. Sie spielt oft Pen-and-Paper-Rollenspiele, in denen sie und ihre Freunde sich als Crew der Starship Enterprise ausgeben. Marys Figur ist Captain Picard, was bedeutet, dass sie das Logbuch des Captains führen muss. Sie liebt den kreativen Teil des Spiels, aber sie mag es nicht, spontan Zufallsdaten zu erzeugen.

Hilf Mary, indem du Zufallsgeneratoren für Daten erstellst, die häufig im Logbuch des Captains vorkommen.

1. Erzeuge einen zufälligen Planeten

Die Starship Enterprise begegnet auf ihren Reisen vielen Planeten. Planeten im Star-Trek-Universum werden anhand ihrer Eigenschaften in Kategorien eingeteilt. Zum Beispiel ist die Erde ein Planet der Klasse M. Alle möglichen Planetenklassen sind: D, H, J, K, L, M, N, R, T und Y.

Implementiere die Funktion random_planet_class/0. Sie sollte eine der Planetenklassen zufällig zurückgeben.

CaptainsLog.random_planet_class()
# => "K"

2. Erzeuge eine zufällige Registriernummer eines Raumschiffs

Die Enterprise (Registriernummer NCC-1701) ist nicht das einzige Raumschiff, das herumfliegt! Wenn sie sich mit einem anderen Raumschiff trifft, muss Mary die Registriernummer dieses Raumschiffs protokollieren.

Registriernummern beginnen mit dem Präfix „NCC-" und verwenden dann eine Zahl von 1000 bis 9999 (einschließlich).

Implementiere die Funktion random_ship_registry_number/0, die eine zufällige Registriernummer eines Raumschiffs zurückgibt.

CaptainsLog.random_ship_registry_number()
# => "NCC-1947"

3. Erzeuge eine zufällige Sternzeit

Was nützt ein Logbuch, wenn es keine Daten enthält?

Eine Sternzeit ist eine Gleitkommazahl. Die Abenteuer der Starship Enterprise aus der ersten Staffel von The Next Generation spielen zwischen den Sternzeiten 41000.0 und 42000.0. Die „4" steht für das 24. Jahrhundert, die „1" für die erste Staffel.

Implementiere die Funktion random_stardate/0, die eine Gleitkommazahl zwischen 41000.0 (einschließlich) und 42000.0 (ausschließlich) zurückgibt.

Die Implementierung sollte eine Erlang-Funktion verwenden.

CaptainsLog.random_stardate()
# => 41458.15721310934

4. Formatiere die Sternzeit

Im Logbuch des Captains werden Sternzeiten normalerweise auf eine Nachkommastelle gerundet.

Implementiere die Funktion format_stardate/1, die eine Gleitkommazahl entgegennimmt und einen String zurückgibt, in dem die Zahl auf eine Nachkommastelle gerundet ist.

Die Implementierung sollte eine Erlang-Funktion verwenden.

CaptainsLog.format_stardate(41458.15721310934)
# => "41458.2"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Elixir Exercism

Bereit, mit Logbuch des Kapitäns zu starten?

Melde dich bei Exercism an, um Elixir mit 58 Konzepte168 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.