DCV 2022-09/Uebungen Herbstferien
Wir wünschen euch schöne Ferien. Genießt die freie Zeit und nützt sie auch um die Dinge zu festigen.
Auf jedenfall sollte die Selbstkontrolle erledigt werden.
Aufgabe: Selbstkontrolle
Eine gute Wiederholung findet sich hier: Selbstkontrolle.
Datenströme wurden noch nicht behandelt, bitte ignorieren. Reguläre Ausdrücke nur wenn ihr das am Freitag noch behandelt habt!
Hackerrank
Probiert es doch mal aus, macht spaß: https://hackerrank.com
Danke Milan!
Aufgabe: GameOfLife
Aufgabe: TicTacToe KI
Erweitere TicTacToe, dass gegen den Computer gespielt werden kann. Siehe MiniMax Algorithmus.
Aufgabe: Türme von Hanoi
Finde eine programmatische Lösung für die Türme von Hanoi.
Datenstruktur: int[][] hanoi = new int[3][Anzahl Scheiben]
Jede Scheibe ist ein Wert mit der Größe
Funktionen:
- Spielfeld ausdrücken
- Spieldeld initialisieren
- hanoiMove(int from, int to, int using, int count)
* count == 1 // direct move
* ansonstens 3 Schritte
* hanoiMove(from, using, to, count - 1)
* hanoiMove(from, to, using, 1) // Wirkliche Bewegung
* hanoiMove(using, to, from, count - 1)
Siehe Unterstützung: Fibonacci
Aufgabe: Blackjack
Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)
Datenstruktur: int[] deck = new int[52]; (initialisiert von 0, 1, 2 bis 51.
Funktion:
- Mischen mit Swap
- getColor() auf Basis value / 13
- getFigure() auf Basis value % 13
- getValue()
- getValueHand() // zB: Summe von 3 Karten
Strategie für die Bank: Zieht bis < 17
Achte auf die schöne Ausdruck!
Aufgabe: Hashsumme/Prüfsumme
Erstelle ein Programm welches die Prüfsumme einer gegebenen Datei berechnet und ausgibt. Hierbei kann auch gerne resources/txt/simpeText.txt verwendet werden. Nähere Informationen zur Hashsumme finden sich hier.
Lies die Datei mithilfe eines FileInputStream:
FileInputStream in = new FileInputStream([YourClass].class.getClassLoader().getResourceAsStream("txt/simpleText.txt"));
byte[] buffer = new byte[1024];
int read = 0;
while((read = in.read(buffer)) > 0) {
//Digest aktualisieren
}
Erstelle einen MessageDigest für MD5 und SHA256 und befülle diesen mit dem byte[] buffer. Instanzen von MessageDigest erhältst du mittels MessageDigest.getInstance([algorithm]).
Um die Prüfsumme des MessageDigest lerbar zu machen verwende:
private static String toString(MessageDigest digest) {
return new BigInteger(1,digest.digest()).toString(16);
}
#Prüfsummen für resources/txt/simpleText.txt
md5: a82e2148461ca6b10c48ddb920a40f15
sha256: 4711958a43201ac481b37ab2f50a1fd366cc14f5996ad7e02bc01b2f9ea0d12
Online MD5 Hash generator Hier kann die Hashsumme für einen gegebenen Text berechnet werden: MD5 Generator
Aufgabe: Cäsar-Verschlüsselung
Bei der Cäsar-Verschlüsselung werden die Buchstaben um eine fixe Anzahl Stellen
verschoben (z.B. 2) a wird zu c, f wird zu h, z wird zu b usw.
Implementiere eine Methode encrypt(String) welche einen String zurückgibt und und eine Methode
decrypt(String) welche einen String.
Entschlüsselt
Dies ist ein Beispieltext der mit einem Klick verschlüsselt werden kann. Hier kann auch
ein eigenen Text herein geschrieben, oder ein Geheimcode zum Entschlüsseln herein
kopiert werden.
Verschlüsselt (um 3 verschoben)
Glhv lvw hlq EhlvslhowhAw ghu plw hlqhp Nolfn yhuvfkoüvvhow zhughq ndqq. Klhu
ndqq dxfk hlq hljhqhq WhAw khuhlq jhvfkulhehq, rghu hlq Jhkhlpfrgh Cxp
Hqwvfkoüvvhoq khuhlq nrslhuw zhughq.