Wenn du etwas mit einem Raspberry Pi bauen möchtest, wirst du wahrscheinlich Widerstände verwenden. Für diese Übung musst du zwei Dinge über sie wissen:
Um dieses Problem zu umgehen, drucken Hersteller farbcodierte Bänder auf die Widerstände, um ihre Widerstandswerte anzugeben. Jedes Band hat eine Position und einen numerischen Wert.
Die ersten 2 Bänder eines Widerstands haben ein einfaches Kodierungsschema: Jede Farbe entspricht einer einzelnen Zahl. Wenn sie zum Beispiel ein braunes Band (Wert 1) gefolgt von einem grünen Band (Wert 5) aufdrucken würden, ergäbe das die Zahl 15.
In dieser Übung wirst du ein hilfreiches Programm erstellen, damit du dir die Werte der Bänder nicht merken musst. Das Programm nimmt Farbnamen als Eingabe und gibt eine zweistellige Zahl aus, selbst wenn die Eingabe mehr als zwei Farben umfasst!
Die Farben der Bänder sind wie folgt kodiert:
Aus dem obigen Beispiel: brown-green sollte 15 zurückgeben, und brown-green-violet sollte ebenfalls 15 zurückgeben, wobei die dritte Farbe ignoriert wird.
Diese Übung ist als Fortsetzung von Resistor Color gedacht und baut darauf auf.
Du kannst die Übungen zwar in beliebiger Reihenfolge lösen, wir empfehlen dir aber, dich an die vorgeschlagene Reihenfolge zu halten.
Für die Farben ist in dieser Übung bereits eine Syntax vorgegeben, und zwar über das Präfix c*, z. B. c*black.
Du definierst dann eine Syntax, die gemäß den Anweisungen eine Folge von Farben einer Zahl zuordnet.
Die Farben stehen zwischen *[[ und ]] und werden durch , getrennt, z. B. *[[c*black, c*yellow, c*violet]].
Für diese Aufgabe brauchst du wahrscheinlich Notationen oder Makros. Vielleicht hilft dir ein Blick in eine Referenz.
Da neue Syntax zur Kompilierzeit expandiert wird, lässt sich kein Test kompilieren, solange nicht die gesamte erforderliche Syntax definiert ist.
Deshalb verwenden wir statt klassischer Laufzeittests #guard_msgs.
Dieser Befehl vergleicht einen gegebenen Docstring mit einer Nachricht, die ein anderer Befehl erzeugt, in diesem Fall #eval, und meldet einen Fehler, wenn sie sich unterscheiden.
Das Ausbleiben eines Fehlers kannst du als bestandenen Test betrachten.
Wenn du lokal oder in Leans Online-Playground arbeitest, bekommst du über die Lean InfoView sofort eine Rückmeldung zu jedem Fehler, den #guard_msgs meldet.
Der Online-Test-Runner unterstützt derzeit nicht das Importieren der vollständigen Metaprogrammierungsbibliothek von Lean.
Du darfst zwar alle Möglichkeiten nutzen, die Lean standardmäßig bietet, auch die im Lean-Namespace, aber wenn du import Lean hinzufügst oder bestimmte Module aus dem Lean-Namespace importierst, wird deine Abgabe abgelehnt, wenn du sie bei Exercism einreichst.
Beachte, dass das Importieren der Lean-Bibliothek nicht nötig ist, um diese Übung zu lösen.
Melde dich bei Exercism an, um Lean mit 100 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.