Add new sheet

This commit is contained in:
Lukas Kalbertodt 2016-11-30 00:50:23 +01:00
parent 2ddaf61430
commit 500b7850ed
4 changed files with 103 additions and 0 deletions

5
aufgaben/sheet6/README.md Executable file
View File

@ -0,0 +1,5 @@
Blatt 6
=======
Dreimal dürft ihr raten: Diese Aufgaben sollen auf dem Branch `sheet6`
bearbeitet werden, der von dem `master`-Branch entsprungen ist!

41
aufgaben/sheet6/task1/README.md Executable file
View File

@ -0,0 +1,41 @@
Aufgabe 1: Hilfsfunktionen
==========================
In dieser Aufgabe soll eine Library-Crate (Cargo Projekt) erstellt werden,
welche ein paar kleine, aber nützliche Funktionalitäten bereitstellt.
Für alle drei Funktionen/Methoden soll ein Unittest geschrieben werden. Alle
Unittests liegen in dem `tests` Untermodul der Crate; alles andere kann aber
im Wurzelmodul definiert sein. *Hinweis*: Mit `cargo test` können alle
Unittests ausgeführt werden.
### a) `clamp()`
Diese Funktion nimmt drei Parameter: einen Wert sowie `min` und `max`.
Die Funktion returned einfach den gegebenen Wert, solange er zwischen `min` und
`max` liegt. Falls der gegebene Wert jedoch kleiner als `min` ist, wird `min`
returned; das gleiche entsprechend mit `max`.
Die Funktion soll so allgemein wie möglich formuliert werden und keine
genauen Typen festlegen.
### b) Summe und Produkt
Die Funktion nimmt zwei Argumente and und liefert sowohl die Summe als auch
das Produkt dieser beiden Werte zurück. Auch diese Funktion soll möglichst
allgemein formuliert werden.
### c) Extension Trait
Wir würden gerne `bool`-Variablen sehr einfach in ein `Option<T>` umwandeln
können, also z.B. so einen Code aufrufen können:
```rust
true.into_option(3); // Some(3)
false.into_option("susi"); // None
```
Fügt die Methode zu `bool` mit Hilfe eines Extension Traits hinzu.

36
aufgaben/sheet6/task2/README.md Executable file
View File

@ -0,0 +1,36 @@
Aufgabe 2: Vektor
=================
In dieser Aufgabe soll ein einfacher, generischer Vektor-Typ erstellt werden.
Wieder soll eine Library-Crate als Cargo-Projekt angelegt werden und im `tests`
Untermodul sollen ein paar kurze Unittests die eigentliche Funktionalität
testen.
Der Datentyp soll `Vector2` heißen und besteht aus einer x- und y-Koordinate.
Der Typ dieser Koordinaten ist jedoch generisch und kann grundsätzlich erstmal
alles sein. Neben den expliziten Anforderungen in a) und b) kann und/oder
muss `Vector2` noch weitere Traits implementieren, solange das möglich ist.
### a) Konstruktor-Funktionen
Wir möchten vier Konstruktor-Funktionen zu `Vector2` hinzufügen:
- `new(x, y)`: bekommt beide Koordinaten als Parameter
- `origin()`: Vektor am Nullpunkt (beide Koordinaten 0)
- `unit_x()`: Ein Einheitsvektor mit x=1
- `unit_y()`: Ein Einheitsvektor mit y=1
Um diese Funktionen implementieren zu können, greifen wir auf schon vorhandene
Traits zu. Diese finden wir in der Crate `num-traits`, die es wie gewohnt auf
crates.io gibt. Von dieser externen Bibliothek müsst ihr euch passende Traits,
die ihr nutzen wollt/müsst, aussuchen (wir sind nur an den Traits der
Bibliothek interessiert!).
### b) Operatoren überladen
Für den Vektor soll der `+` und `*` Operator überladen werden (wenn dies
möglich ist).
Dabei ist das eine natürlich die Vektoraddition (also Vektor + Vektor), das
andere ist die Skalarmultiplikation (also Vektor * Skalar).

21
aufgaben/sheet6/task3/README.md Executable file
View File

@ -0,0 +1,21 @@
Aufgabe 3: Swagger
==================
*Diese Aufgabe kann in einer einzelnen `.rs` Datei gelöst werden und benötigt
kein Cargo-Projekt.*
Erstellt einen Typ `Swagger`, welcher einen beliebigen anderen Typen in sich
speichert.
`Swagger` soll mit `println!()` und dem normalen `{}` Platzhalter
ausgegeben werden können, wenn immer das möglich ist.
Die Ausgabe soll "yolo ??? swag" sein, wobei "???" für die Ausgabe des inneren
Objekts steht.
Wäre also eine `3` in einer Swagger-Instanz gespeichert und man würde diese
Instanz ausgeben, wäre die Ausgabe "yolo 3 swag".
Weiterhin soll es möglich sein, auf jedem beliebigen Typen direkt eine Methode
`with_swag()` aufzurufen, die diesen Typen in eine `Swagger`-Instanz verpackt.
```
println!("{}", 3.with_swag()); // prints: "yolo 3 swag"
```