DCV 2023 03/Uebungen Osterferien: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „ '''Wir wünschen euch schöne Ferien. Genießt die freie Zeit und nützt diese auch zum programmieren üben!''' {{TOC limit|4}} === Aufgabe: Selbstkontrolle === Das wiederholen der Selbstkontrolle, kann nicht schaden, vor allem wenn man nicht alles lösen konnte: Selbstkontrolle. === Hackerrank === Probiert es doch mal aus, macht spaß: https://hackerrank.com === Aufgabe: GameOfLife === DCV_2…“
 
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:


=== Aufgabe: Selbstkontrolle ===
=== Aufgabe: Selbstkontrolle ===
Das wiederholen der Selbstkontrolle, kann nicht schaden, vor allem wenn man nicht alles lösen konnte: [[Selbstkontrolle_Strukturierte_Programmierung_2022_09|Selbstkontrolle]].
'''Die Selbstkontrolle muss auf jeden Fall bearbeitet werden, diese ist nicht optional!'''
 
[[DCV_2023_03/Selbstkontrolle_Strukturierte_Programmierung|Selbstkontrolle]]
 
Die Punkte Datenströme und Kalender sind '''optional''', da dieser noch nicht behandelt wurde. Man kann es natürlich trotzdem erledigen!


=== Hackerrank ===
=== Hackerrank ===
Zeile 18: Zeile 22:
Finde eine programmatische Lösung für die [https://de.wikipedia.org/wiki/T%C3%BCrme_von_Hanoi Türme von Hanoi].
Finde eine programmatische Lösung für die [https://de.wikipedia.org/wiki/T%C3%BCrme_von_Hanoi Türme von Hanoi].


Datenstruktur: int[][] hanoi = new int[3][Anzahl Scheiben]
Als Datenstruktur wird ein 2-Dimensionales Array benötigt:
{{JML|code=
int[][] hanoi = new int[3][Anzahl Scheiben]
}}


Jede Scheibe ist ein Wert mit der Größe
Jede Scheibe wird durch eine Zahl reprästentiert, die dessen Größe beschreibt.


Funktionen:
'''Folgende Methoden werden benötigt''':
* Spielfeld ausdrücken
* Spielfeld ausgeben
* Spieldeld initialisieren
* Spielfeld initialisieren
* hanoiMove(int from, int to, int using, int count)
* hanoiMove(int from, int to, int using, int count)
   * count == 1 // direct move
   * count == 1 // direct move
Zeile 32: Zeile 39:
       * hanoiMove(using, to, from, count - 1)
       * hanoiMove(using, to, from, count - 1)


 
'''Tip:''' [https://de.wikipedia.org/wiki/Fibonacci-Folge Fibonacci]
Siehe Unterstützung: Fibonacci
 


=== Aufgabe: Blackjack ===
=== Aufgabe: Blackjack ===
Zeile 40: Zeile 45:
Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)
Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)


Datenstruktur: int[] deck = new int[52]; (initialisiert von 0, 1, 2 bis 51.
{{JML|code=
int[] deck = new int[52]; (initialisiert von 0, 1, 2 bis 51.)
}}


Funktion:
'''Methoden:'''
* Mischen mit Swap
* Mischen mit swap
* getColor() auf Basis value / 13
* getColor() auf Basis value / 13
* getFigure() auf Basis value % 13
* getFigure() auf Basis value % 13
Zeile 51: Zeile 58:
Strategie für die Bank: Zieht bis < 17
Strategie für die Bank: Zieht bis < 17


Achte auf die schöne Ausdruck!
Achte auf eine schöne Ausgabe!


=== Aufgabe: Hashsumme/Prüfsumme ===
=== Aufgabe: Hashsumme/Prüfsumme ===
Zeile 57: Zeile 64:
Lies die Datei mithilfe eines {{JSL|FileInputStream}}:
Lies die Datei mithilfe eines {{JSL|FileInputStream}}:
{{JML|code=
{{JML|code=
FileInputStream in = new FileInputStream([YourClass].class.getClassLoader().getResourceAsStream("txt/simpleText.txt"));
InputStream in = [YourClass].class.getClassLoader().getResourceAsStream("txt/simpleText.txt");
byte[] buffer = new byte[1024];
byte[] buffer = new byte[1024];
int read = 0;
int read = 0;

Aktuelle Version vom 31. März 2023, 10:17 Uhr

Wir wünschen euch schöne Ferien. Genießt die freie Zeit und nützt diese auch zum programmieren üben!

Aufgabe: Selbstkontrolle

Die Selbstkontrolle muss auf jeden Fall bearbeitet werden, diese ist nicht optional!

Selbstkontrolle

Die Punkte Datenströme und Kalender sind optional, da dieser noch nicht behandelt wurde. Man kann es natürlich trotzdem erledigen!

Hackerrank

Probiert es doch mal aus, macht spaß: https://hackerrank.com

Aufgabe: GameOfLife

Conways Game of life

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.

Als Datenstruktur wird ein 2-Dimensionales Array benötigt:

int[][] hanoi = new int[3][Anzahl Scheiben]

Jede Scheibe wird durch eine Zahl reprästentiert, die dessen Größe beschreibt.

Folgende Methoden werden benötigt:

  • Spielfeld ausgeben
  • Spielfeld 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)
Tip: Fibonacci

Aufgabe: Blackjack

Regeln: http://www.hitorstand.net/strategy.php (Wir machen ohne Split)

int[] deck = new int[52]; (initialisiert von 0, 1, 2 bis 51.)

Methoden:

  • 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 eine schöne Ausgabe!

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:

InputStream in = [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.