Tracks
/
Crystal
Crystal
/
Übungen
/
Bibliothek von Luton
Bibliothek von Luton

Bibliothek von Luton

Lernübung

Einführung

Char ist ein Datentyp in Crystal, der einen 32-Bit-Unicode-Codepoint darstellt. Seine Größe macht ihn speichereffizient und gibt ihm bestimmte Eigenschaften, die Strings nicht haben. Er wird mit einfachen Anführungszeichen (') erstellt und erlaubt nur, dass ein einziger Unicode-Codepoint darin steht.

'a' # => 'a'
'a'.class # => Char

Es ist ganz üblich, mit Chars zu arbeiten, wenn du in Crystal mit Strings arbeitest, da einige Methoden der String-Klasse Chars zurückgeben oder Chars als Argumente nehmen. Zum Beispiel gibt die Methode String#[] einen Char zurück, oder die Methode String#chars gibt eine Sammlung von Chars zurück.

Erhöhen / Verringern

Da ein Char ein 32-Bit-Unicode-Codepoint ist, unterstützt er das Erhöhen und Verringern. Wenn du also 'a' hast, kannst du durch Addieren von eins 'b' erhalten.

'a' + 5
# => 'f'

'z' - 25
# => 'a'

Es gibt auch eine Methode namens Char#succ, die den nächsten Char in der Unicode-Tabelle zurückgibt, und Char#pred, die den vorherigen Char in der Unicode-Tabelle zurückgibt.

'a'.succ
# => 'b'

'z'.pred
# => 'y'

Verkettung

Da ein Char nur dazu gedacht ist, ein 32-Bit-Unicode-Codepoint darzustellen, können zwei Chars nicht verkettet werden. Deshalb können Chars nur mit Strings verkettet werden.

'a' + "bc"
# => "abc"

'a' + 'b'
# => error: expected argument #1 to 'Char#+' to be Int or String, not Char

Eigenschaftsmethoden

Crystal hat ein paar Methoden, um Informationen über ein Zeichen zu erhalten, etwa ob es eine Zahl oder ein Buchstabe ist oder ob es groß- oder kleingeschrieben ist. Hier ist eine Liste einiger dieser Methoden; eine vollständige Liste findest du in der Char API:

Methode Beschreibung
Char#number? Gibt true zurück, wenn der Char eine Zahl ist
Char#letter? Gibt true zurück, wenn der Char ein Buchstabe ist
Char#lowercase? Gibt true zurück, wenn der Char kleingeschrieben ist
Char#uppercase? Gibt true zurück, wenn der Char großgeschrieben ist
Char#ascii? Gibt true zurück, wenn der Char ein ASCII-Zeichen ist
Char#whitespace? Gibt true zurück, wenn der Char ein Leerraumzeichen ist

Umwandeln

Umwandeln zwischen Codepoints und Chars

Da ein Char ein 32-Bit-Unicode-Codepoint ist, kannst du zwischen Chars und Codepoints (Int) umwandeln. Das kannst du mit der Methode Char#ord machen, die den Codepoint des Chars zurückgibt, oder mit der Methode Int#chr, die den Char des Codepoints zurückgibt.

'a'.ord
# => 97

97.chr
# => 'a'

Umwandeln zwischen Typen

Wie bei anderen Datentypen gibt es bei Chars ein paar Methoden zum Umwandeln zwischen Typen. Die gebräuchlichste ist die Methode Char#to_s, die den Char in einen String umwandelt. Es gibt aber auch die Methode Char#to_i, die den Char in einen Int umwandelt, und die Methode Char#to_f, die den Char in einen Float umwandelt.

'a'.to_s
# => "a"

'4'.to_i
# => 4

'a'.to_i
# => Error: Invalid integer: a (ArgumentError)

Anleitung

Die Bibliothek von Luton ist eine große Bibliothek mit einer umfangreichen Sammlung von Literatur, von Büchern bis hin zu Kunst. Die Bibliothek hat eine Abteilung, in der Literatur erforscht und Bücher in das Computersystem eingetragen werden.

Bestimmte Bereiche sollen automatisiert werden, und du wirst gebeten, dabei zu helfen. Dazu gehört, Abläufe von der Automatisierung der Formulare für den Eintragungsprozess bis hin zum Entschlüsseln von Texten zu unterstützen.

1. Ermittle den ersten Buchstaben des Titels

Die Bücher einer Bibliothek sollen leicht zu finden sein, deshalb werden sie nach dem ersten Buchstaben des Titels sortiert.

Implementiere die Methode Library.first_letter, die ein Argument title entgegennimmt, das den Titel des Buchs enthält. Die Methode soll den ersten Buchstaben des Titels zurückgeben.

Library.first_letter("Mystery of the Crystal Skull")
# => 'M'

2. Ermittle die Initialen der Autoren

Die Bibliothek hat viele Bücher, die von verschiedenen Autoren geschrieben wurden. Autoren werden oft mit ihren Initialen bezeichnet, deshalb hat die Bibliothek ein System angefordert, das die Initialen eines Autors ausgibt, wenn man den Vornamen und den Nachnamen des Autors eingibt. Die Initialen sollen folgendermaßen formatiert sein: {first_letter_of_first_name}.{first_letter_of_last_name}

Implementiere die Methode Library.initials, die zwei Argumente first_name und last_name entgegennimmt, die den Vornamen und den Nachnamen des Autors enthalten. Die Methode soll die Initialen des Autors zurückgeben.

Library.initials("William", "Shakespeare")
# => "W.S"

3. Entschlüssele einen Buchstaben

Einige Literatur ist verschlüsselt, und die Bibliothek hat viele verschlüsselte Texte. Die Bibliothek hätte gern ein neues Entschlüsselungssystem für eine spezielle Verschlüsselung.

Die Verschlüsselung funktioniert so, dass der Buchstabe durch den im Alphabet vorangehenden Buchstaben ersetzt wird. Zum Beispiel wird aus a ein z, aus b ein a, aus c ein b und so weiter.

Die Bibliothek möchte, dass sowohl Groß- als auch Kleinbuchstaben entschlüsselt werden können und dabei die Groß- bzw. Kleinschreibung des ursprünglichen Buchstabens erhalten bleibt.

Implementiere die Methode Library.decrypt_character, die ein Argument character entgegennimmt, das den zu entschlüsselnden Buchstaben enthält. Die Methode soll den entschlüsselten Buchstaben zurückgeben.

Library.decrypt_character('a')
# => 'z'

4. Entschlüssele einen Text

Die Bibliothek möchte außerdem einen ganzen Text mit dieser Verschlüsselung entschlüsseln, die jeweils den vorangehenden Buchstaben im Alphabet nimmt.

Die Entschlüsselung soll nur Buchstaben entschlüsseln und alle anderen Zeichen unverändert lassen.

Implementiere die Methode Library.decrypt_text, die ein Argument text entgegennimmt, das den zu entschlüsselnden Text enthält. Die Methode soll den entschlüsselten Text zurückgeben.

Library.decrypt_text("Ifmmp Xpsme!")
# => "Hello World!"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Crystal Exercism

Bereit, mit Bibliothek von Luton zu starten?

Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.