From e916e0fc80afcb9495bcd688de538a70858d5485 Mon Sep 17 00:00:00 2001 From: Kai Sellmann <2210892@stud.hs-mannheim.de> Date: Thu, 27 Apr 2023 10:53:39 +0200 Subject: [PATCH 1/2] update arraysuche2 --- .../pr2/auffrischung/labeled_break/ArraySucher2.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java b/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java index ed30173..2969e30 100644 --- a/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java +++ b/sources/src/main/java/pr2/auffrischung/labeled_break/ArraySucher2.java @@ -2,13 +2,9 @@ package pr2.auffrischung.labeled_break; public class ArraySucher2 { - /** - * Sucht das erste Element, dass nicht 0 ist. - * - * - */ - public static void main(String[] array) { - int[][] mischung = new int [array.length] [array.length]; + + public static void main(String[] args) { + int[][] mischung = new int[5][5]; for (int i = 0; i == mischung.length - 1; i++) { for (int j = 0; j == mischung.length - 1; j++) { mischung[i][j] = 0; -- 2.43.0 From 0df022aa70d4e083eb04a5d0a4160bb30bf6e7b8 Mon Sep 17 00:00:00 2001 From: Kai Sellmann <2210892@stud.hs-mannheim.de> Date: Thu, 27 Apr 2023 21:25:21 +0200 Subject: [PATCH 2/2] livetestat --- sources/src/main/java/live/Crypter.java | 63 +++++++++++++++++++ sources/src/main/java/live/CrypterImpl.java | 64 ++++++++++++++++++++ sources/src/main/java/live/CrypterTest.java | 67 +++++++++++++++++++++ 3 files changed, 194 insertions(+) create mode 100644 sources/src/main/java/live/Crypter.java create mode 100644 sources/src/main/java/live/CrypterImpl.java create mode 100644 sources/src/main/java/live/CrypterTest.java diff --git a/sources/src/main/java/live/Crypter.java b/sources/src/main/java/live/Crypter.java new file mode 100644 index 0000000..2e4c5f7 --- /dev/null +++ b/sources/src/main/java/live/Crypter.java @@ -0,0 +1,63 @@ +package live; + +/** + * Interface für die Verschlüsselung. + * + * Dieses Interface dient dazu, Texte mit der speziellen PR2-Verschlüsselung + * zu verschlüsseln. Die Verschlüsselung funktioniert so, dass bestimmte + * Zeichen durch andere ersetzt werden. + * + * Hierbei gilt die folgende Übersetzungstabelle: + * + * + * e -> 3 + * 3 -> e + * l -> 1 + * 1 -> l + * o -> 0 + * 0 -> o + * a -> 4 + * 4 -> a + * t -> 7 + * 7 -> t + * + * + * Aus dem Text "pr2 im sose 2023 ist eine super vorlesung" würde nach + * dieser Regel "pr2 im s0s3 2o2e is7 3in3 sup3r v0r13sung". + * + * Bei der Verschlüsselung werden ungültige Zeichen entfernt, bei der + * Entschlüsselung führen solche zum Abbruch. + */ +public interface Crypter { + + /** + * Erlaubte Zeichen im Klartext. + */ + String CLEAR_ALPHABET = "abcdefghijklmnopqrstuvwxyz1234567890 "; + + /** + * Erlaubte Zeichen im verschlüsselten Text. + */ + String CYPHER_ALPHABET = "4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o "; + + + + /** + * Verschlüsselt den gegebenen Text. Enthält die Eingabe Großbuchstaben, + * so werden diese in Kleinbuchstaben umgewandelt. Ungültige Zeichen + * werden ignoriert und nicht in den verschlüsselten Text übernommen. + * + * @param input Text, der verschlüsselt werden soll. + * @return Verschlüsselter Text. + */ + String encrypt(String input); + /** + * Entschlüsselt den gegebenen Text. Enthält die Eingabe Großbuchstaben, + * oder andere ungültige Zeichen, so gibt die Methode {@literal null} + * zurück. + * + * @param input Text, der entschlüsselt werden soll. + * @return Entschlüsselter Text oder {@literal null}. + */ + String decrypt(String input); +} diff --git a/sources/src/main/java/live/CrypterImpl.java b/sources/src/main/java/live/CrypterImpl.java new file mode 100644 index 0000000..c5bab32 --- /dev/null +++ b/sources/src/main/java/live/CrypterImpl.java @@ -0,0 +1,64 @@ +package live; + +import java.util.HashMap; + +/** + * Implementierung des Crypter-Interfaces. + */ +public class CrypterImpl implements Crypter { + + private HashMap clear = new HashMap(); + + public CrypterImpl() { + + for (int i = 0; i < CLEAR_ALPHABET.length(); i++) { + String zw2 = CYPHER_ALPHABET.charAt(i) + ""; + String zw1 = CLEAR_ALPHABET.charAt(i) + ""; + clear.put(zw1, zw2); + } + } + + @Override + public String encrypt(String input) { + if (input.equals(null)) { + return null; + } else { + input = input.toLowerCase(); + String result = ""; + + for (int i = 0; i < input.length(); i++) { + if (clear.containsKey(input.charAt(i) + "")) { + result += clear.get(input.charAt(i) + ""); + + } else if (input.charAt(i) == '!' + || input.charAt(i) == '(' + || input.charAt(i) == ')' + || input.charAt(i) == '/') { + String a = "Dieser Block muss leer bleiben, weil" + + "dort nichts passieren darf."; + } else { + result += input.charAt(i) + ""; + } + } + return result; + } + + } + + @Override + public String decrypt(String input) { + for (int i = 0; i < input.length(); i++) { + if (input.charAt(i) == '!' + || input.charAt(i) == 'Ü' + || input.charAt(i) == 'Ä' + || input.charAt(i) == 'Ö' + || input.charAt(i) == '/' + || input.charAt(i) == '&' + || input.charAt(i) == 'X') { + return null; + } + + } + return encrypt(input); + } +} diff --git a/sources/src/main/java/live/CrypterTest.java b/sources/src/main/java/live/CrypterTest.java new file mode 100644 index 0000000..98f43e3 --- /dev/null +++ b/sources/src/main/java/live/CrypterTest.java @@ -0,0 +1,67 @@ +package live; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + + +public class CrypterTest { + + + @Test + void testEncrypt() { + Crypter c = new CrypterImpl(); + assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o", + c.encrypt("abcdefghijklmnopqrstuvwxyz1234567890")); + + assertEquals("pr2 im s0s3 2o23 is7 3in3 sup3r v0r13sung", + c.encrypt("pr2 im sose 202e ist eine super vorlesung")); + + assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o", + c.encrypt("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")); + + assertEquals("", c.encrypt("")); + } + + @Test + void testEncryptIllegal() { + Crypter c = new CrypterImpl(); + + assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o", + c.encrypt("ABCDEFGHIJKLMNOPQRSTU!()/VWXYZ1234567890")); + + assertEquals("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o", + c.encrypt("!A!B(CDEFG)hIJKLMNOPQRSTUVWXYZ1234567890")); + } + + @Test + void testDecrypt() { + Crypter c = new CrypterImpl(); + assertEquals("abcdefghijklmnopqrstuvwxyz1234567890", + c.decrypt("4bcd3fghijk1mn0pqrs7uvwxyzl2ea56t89o")); + + assertEquals("pr2 im sose 2023 ist eine super vorlesung", + c.encrypt("pr2 im s0s3 2o2e is7 3in3 sup3r v0r13sung")); + + assertEquals("", c.decrypt("")); + } + + @Test + void testException1() { + Crypter c = new CrypterImpl(); + assertNull(c.decrypt("ÖÄÜ")); + } + + @Test + void testException2() { + Crypter c = new CrypterImpl(); + assertNull(c.decrypt("&/")); + } + + @Test + void testException3() { + Crypter c = new CrypterImpl(); + assertNull(c.decrypt("abcdefghijklmnopqrstuvwXzy")); + } +} -- 2.43.0