From e3382db51882c1c1a989aa023331f9e9b0d12bde Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:04:51 +0200 Subject: [PATCH 01/39] feat: decrypt ! from a --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 3 +++ .../java/io/github/vbetsch/codecracker/CodeCrackerTest.java | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index cffbfd0..80142a1 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -2,4 +2,7 @@ public class CodeCracker { + public char decrypt(char a) { + return '!'; + } } \ No newline at end of file diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index d815970..efc16c3 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -1,16 +1,20 @@ package io.github.vbetsch.codecracker; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; class CodeCrackerTest { @Test - void should_doSomething_whenSomeCondition() { + void should_returnExclamationPoint_whenDecryptLetterA() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act + char decryptedLetterA = codeCracker.decrypt('a'); + // Assert + assertEquals('!', decryptedLetterA); } } From e570399fabede829ca7abb7eaf3d51e12a923949 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:08:59 +0200 Subject: [PATCH 02/39] test: should_returnEndParenthesis_whenDecryptLetterB --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index efc16c3..be05cd5 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -17,4 +17,16 @@ void should_returnExclamationPoint_whenDecryptLetterA() { assertEquals('!', decryptedLetterA); } + @Test + void should_returnEndParenthesis_whenDecryptLetterB() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + char decryptedLetterA = codeCracker.decrypt('b'); + + // Assert + assertEquals(')', decryptedLetterA); + } + } From f6e2cd41d8caa78835b91e4b758c61b19b6ad99a Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:14:39 +0200 Subject: [PATCH 03/39] feat: create translations --- .../io/github/vbetsch/codecracker/CodeCracker.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 80142a1..e807dda 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -1,8 +1,14 @@ package io.github.vbetsch.codecracker; +import java.util.Map; + public class CodeCracker { + Map translations = Map.of( + 'a', '!', + 'b', ')' + ); - public char decrypt(char a) { - return '!'; + public char decrypt(char letter) { + return this.translations.get(letter); } } \ No newline at end of file From 189af18be4ec1c54962093522ccd0c00c29148b3 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:17:10 +0200 Subject: [PATCH 04/39] test: should_returnExclamationPointAndEndParenthesis_whenDecryptStringAB --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index be05cd5..3650699 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -29,4 +29,15 @@ void should_returnEndParenthesis_whenDecryptLetterB() { assertEquals(')', decryptedLetterA); } + @Test + void should_returnExclamationPointAndEndParenthesis_whenDecryptStringAB() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + char decryptedString = codeCracker.decryptString("ab"); + + // Assert + assertEquals("!)", decryptedString); + } } From 370d3d54dca435f979176ac2b19d94e8ecc8b647 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:17:46 +0200 Subject: [PATCH 05/39] fix: typing --- .../java/io/github/vbetsch/codecracker/CodeCrackerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 3650699..4b7b784 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -35,7 +35,7 @@ void should_returnExclamationPointAndEndParenthesis_whenDecryptStringAB() { CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedString = codeCracker.decryptString("ab"); + String decryptedString = codeCracker.decryptString("ab"); // Assert assertEquals("!)", decryptedString); From 88a3cc79428d0119612d59d8fb949735148240b5 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:21:36 +0200 Subject: [PATCH 06/39] feat: create decryptString --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index e807dda..48842eb 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -11,4 +11,12 @@ public class CodeCracker { public char decrypt(char letter) { return this.translations.get(letter); } + + public String decryptString(String string) { + StringBuilder stringBuilder = new StringBuilder(); + for (char c : string.toCharArray()) { + stringBuilder.append(decrypt(c)); + } + return stringBuilder.toString(); + } } \ No newline at end of file From 08c39b5d991db3727070e302fd008dcb600d2859 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:22:07 +0200 Subject: [PATCH 07/39] refactor: rename decryptString to decryptWord --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 2 +- .../java/io/github/vbetsch/codecracker/CodeCrackerTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 48842eb..7e0af11 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -12,7 +12,7 @@ public char decrypt(char letter) { return this.translations.get(letter); } - public String decryptString(String string) { + public String decryptWord(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { stringBuilder.append(decrypt(c)); diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 4b7b784..db3b8b4 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -35,7 +35,7 @@ void should_returnExclamationPointAndEndParenthesis_whenDecryptStringAB() { CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptString("ab"); + String decryptedString = codeCracker.decryptWord("ab"); // Assert assertEquals("!)", decryptedString); From 52c2dae220fbc6c3d5b0bec3c48c994aa42696b6 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:22:36 +0200 Subject: [PATCH 08/39] refactor: rename should_returnExclamationPointAndEndParenthesis_whenDecryptStringAB to should_returnExclamationPointAndEndParenthesis_whenDecryptWordAB --- .../java/io/github/vbetsch/codecracker/CodeCrackerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index db3b8b4..d7001f1 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -30,7 +30,7 @@ void should_returnEndParenthesis_whenDecryptLetterB() { } @Test - void should_returnExclamationPointAndEndParenthesis_whenDecryptStringAB() { + void should_returnExclamationPointAndEndParenthesis_whenDecryptWordAB() { // Arrange CodeCracker codeCracker = new CodeCracker(); From 1054fd59c559c8c7dab523b63c3abdd6f68fe08e Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:23:20 +0200 Subject: [PATCH 09/39] refactor: rename decrypt to decryptLetter --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 4 ++-- .../java/io/github/vbetsch/codecracker/CodeCrackerTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 7e0af11..9cc7a6b 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -8,14 +8,14 @@ public class CodeCracker { 'b', ')' ); - public char decrypt(char letter) { + public char decryptLetter(char letter) { return this.translations.get(letter); } public String decryptWord(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { - stringBuilder.append(decrypt(c)); + stringBuilder.append(decryptLetter(c)); } return stringBuilder.toString(); } diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index d7001f1..38250c2 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -11,7 +11,7 @@ void should_returnExclamationPoint_whenDecryptLetterA() { CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedLetterA = codeCracker.decrypt('a'); + char decryptedLetterA = codeCracker.decryptLetter('a'); // Assert assertEquals('!', decryptedLetterA); @@ -23,7 +23,7 @@ void should_returnEndParenthesis_whenDecryptLetterB() { CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedLetterA = codeCracker.decrypt('b'); + char decryptedLetterA = codeCracker.decryptLetter('b'); // Assert assertEquals(')', decryptedLetterA); From 7cb9f4e871f6e415369a6c9ceda0dd4dd3854e3e Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:24:16 +0200 Subject: [PATCH 10/39] refactor: add final statement --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 9cc7a6b..e4c58ed 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -3,7 +3,7 @@ import java.util.Map; public class CodeCracker { - Map translations = Map.of( + final Map translations = Map.of( 'a', '!', 'b', ')' ); From dbfe4121a140d50fe6654a3eb4adc13ba38cf591 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:25:08 +0200 Subject: [PATCH 11/39] refactor: add private statement --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index e4c58ed..29639ef 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -3,7 +3,7 @@ import java.util.Map; public class CodeCracker { - final Map translations = Map.of( + private final Map translations = Map.of( 'a', '!', 'b', ')' ); From cb45435e17df3ea05a5fbbc9291539cbfebb2f74 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:26:32 +0200 Subject: [PATCH 12/39] refactor: add static statement --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 29639ef..4309bb8 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -3,16 +3,16 @@ import java.util.Map; public class CodeCracker { - private final Map translations = Map.of( + private static final Map translations = Map.of( 'a', '!', 'b', ')' ); - public char decryptLetter(char letter) { - return this.translations.get(letter); + public static char decryptLetter(char letter) { + return translations.get(letter); } - public String decryptWord(String string) { + public static String decryptWord(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { stringBuilder.append(decryptLetter(c)); From e58389542ff5c14bd3a94ec6463c7700da8e3996 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:29:43 +0200 Subject: [PATCH 13/39] refactor: remove static statement --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 4309bb8..fe7f0f9 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -3,16 +3,17 @@ import java.util.Map; public class CodeCracker { - private static final Map translations = Map.of( + + private final Map translations = Map.of( 'a', '!', 'b', ')' ); - public static char decryptLetter(char letter) { + public char decryptLetter(char letter) { return translations.get(letter); } - public static String decryptWord(String string) { + public String decryptWord(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { stringBuilder.append(decryptLetter(c)); From 0e1376cc90edffff42c292c006e4a7c524b2c00a Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:35:39 +0200 Subject: [PATCH 14/39] test: should_returnCorrectString_whenDecryptWordHello --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 38250c2..48e7d13 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -1,6 +1,7 @@ package io.github.vbetsch.codecracker; import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.assertEquals; class CodeCrackerTest { @@ -40,4 +41,16 @@ void should_returnExclamationPointAndEndParenthesis_whenDecryptWordAB() { // Assert assertEquals("!)", decryptedString); } + + @Test + void should_returnCorrectString_whenDecryptWordHello() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + String decryptedString = codeCracker.decryptWord("hello"); + + // Assert + assertEquals("&£aad", decryptedString); + } } From 29d2f6849a3f91a3f684cca11661fce36168a824 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:35:47 +0200 Subject: [PATCH 15/39] feat: complete translations --- .../vbetsch/codecracker/CodeCracker.java | 32 +++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index fe7f0f9..8d58494 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -2,11 +2,37 @@ import java.util.Map; +import static java.util.Map.entry; + public class CodeCracker { - private final Map translations = Map.of( - 'a', '!', - 'b', ')' + private final Map translations = Map.ofEntries( + entry('a', '!'), + entry('b', ')'), + entry('c', '"'), + entry('d', '('), + entry('e', '£'), + entry('f', '*'), + entry('g', '%'), + entry('h', '&'), + entry('i', '>'), + entry('j', '<'), + entry('k', '@'), + entry('l', 'a'), + entry('m', 'b'), + entry('n', 'c'), + entry('o', 'd'), + entry('p', 'e'), + entry('q', 'f'), + entry('r', 'g'), + entry('s', 'h'), + entry('t', 'i'), + entry('u', 'j'), + entry('v', 'k'), + entry('w', 'l'), + entry('x', 'm'), + entry('y', 'n'), + entry('z', 'o') ); public char decryptLetter(char letter) { From 6af1ec19a939aa88132ba0b7d1febc101545e4b2 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:36:36 +0200 Subject: [PATCH 16/39] test: should_returnCorrectString_whenDecryptWordWorld --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 48e7d13..7be0c93 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -53,4 +53,16 @@ void should_returnCorrectString_whenDecryptWordHello() { // Assert assertEquals("&£aad", decryptedString); } + + @Test + void should_returnCorrectString_whenDecryptWordWorld() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + String decryptedString = codeCracker.decryptWord("world"); + + // Assert + assertEquals("ldga(", decryptedString); + } } From 91d66c3b7347d5a46798065cd569d187724cc49a Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:40:11 +0200 Subject: [PATCH 17/39] test: should_returnLetterA_whenEncryptCharExclamationPoint --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 7be0c93..8b2fa03 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -65,4 +65,16 @@ void should_returnCorrectString_whenDecryptWordWorld() { // Assert assertEquals("ldga(", decryptedString); } + + @Test + void should_returnLetterA_whenEncryptCharExclamationPoint() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + char encryptedExclamationPoint = codeCracker.encryptChar('!'); + + // Assert + assertEquals('a', encryptedExclamationPoint); + } } From d38201dc2ddd6de0490fcc010d1dcd65de424b39 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:46:02 +0200 Subject: [PATCH 18/39] feat: create encryptChar with invertMap --- .../io/github/vbetsch/codecracker/CodeCracker.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 8d58494..8164b08 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -1,5 +1,6 @@ package io.github.vbetsch.codecracker; +import java.util.HashMap; import java.util.Map; import static java.util.Map.entry; @@ -35,10 +36,22 @@ public class CodeCracker { entry('z', 'o') ); + private static Map invertMap(Map map) { + Map inverted = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + inverted.put(entry.getValue(), entry.getKey()); + } + return inverted; + } + public char decryptLetter(char letter) { return translations.get(letter); } + public char encryptChar(char character) { + return invertMap(translations).get(character); + } + public String decryptWord(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { From 9a97276ff602b045df5add87e86e7c44ad758b31 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:47:16 +0200 Subject: [PATCH 19/39] refactor: rename translations to dictionary --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 8164b08..b98707f 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -7,7 +7,7 @@ public class CodeCracker { - private final Map translations = Map.ofEntries( + private final Map dictionary = Map.ofEntries( entry('a', '!'), entry('b', ')'), entry('c', '"'), @@ -45,11 +45,11 @@ private static Map invertMap(Map map } public char decryptLetter(char letter) { - return translations.get(letter); + return dictionary.get(letter); } public char encryptChar(char character) { - return invertMap(translations).get(character); + return invertMap(dictionary).get(character); } public String decryptWord(String string) { From 21df9be86ac1dc9aa9194d79e253978d01b03a9d Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:51:35 +0200 Subject: [PATCH 20/39] refactor: create Cypher class --- .../vbetsch/codecracker/CodeCracker.java | 42 ++------------- .../io/github/vbetsch/codecracker/Cypher.java | 53 +++++++++++++++++++ 2 files changed, 56 insertions(+), 39 deletions(-) create mode 100644 src/main/java/io/github/vbetsch/codecracker/Cypher.java diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index b98707f..111b5c8 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -6,50 +6,14 @@ import static java.util.Map.entry; public class CodeCracker { - - private final Map dictionary = Map.ofEntries( - entry('a', '!'), - entry('b', ')'), - entry('c', '"'), - entry('d', '('), - entry('e', '£'), - entry('f', '*'), - entry('g', '%'), - entry('h', '&'), - entry('i', '>'), - entry('j', '<'), - entry('k', '@'), - entry('l', 'a'), - entry('m', 'b'), - entry('n', 'c'), - entry('o', 'd'), - entry('p', 'e'), - entry('q', 'f'), - entry('r', 'g'), - entry('s', 'h'), - entry('t', 'i'), - entry('u', 'j'), - entry('v', 'k'), - entry('w', 'l'), - entry('x', 'm'), - entry('y', 'n'), - entry('z', 'o') - ); - - private static Map invertMap(Map map) { - Map inverted = new HashMap<>(); - for (Map.Entry entry : map.entrySet()) { - inverted.put(entry.getValue(), entry.getKey()); - } - return inverted; - } + private final Cypher cypher = new Cypher(); public char decryptLetter(char letter) { - return dictionary.get(letter); + return cypher.decryptLetter(letter); } public char encryptChar(char character) { - return invertMap(dictionary).get(character); + return cypher.encryptChar(character); } public String decryptWord(String string) { diff --git a/src/main/java/io/github/vbetsch/codecracker/Cypher.java b/src/main/java/io/github/vbetsch/codecracker/Cypher.java new file mode 100644 index 0000000..5ce0ff9 --- /dev/null +++ b/src/main/java/io/github/vbetsch/codecracker/Cypher.java @@ -0,0 +1,53 @@ +package io.github.vbetsch.codecracker; + +import java.util.HashMap; +import java.util.Map; + +import static java.util.Map.entry; + +public class Cypher { + private final Map dictionary = Map.ofEntries( + entry('a', '!'), + entry('b', ')'), + entry('c', '"'), + entry('d', '('), + entry('e', '£'), + entry('f', '*'), + entry('g', '%'), + entry('h', '&'), + entry('i', '>'), + entry('j', '<'), + entry('k', '@'), + entry('l', 'a'), + entry('m', 'b'), + entry('n', 'c'), + entry('o', 'd'), + entry('p', 'e'), + entry('q', 'f'), + entry('r', 'g'), + entry('s', 'h'), + entry('t', 'i'), + entry('u', 'j'), + entry('v', 'k'), + entry('w', 'l'), + entry('x', 'm'), + entry('y', 'n'), + entry('z', 'o') + ); + + private static Map invertMap(Map map) { + Map inverted = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + inverted.put(entry.getValue(), entry.getKey()); + } + return inverted; + } + + public char decryptLetter(char letter) { + return dictionary.get(letter); + } + + public char encryptChar(char character) { + return invertMap(dictionary).get(character); + } +} From f4b44754b96f3b77d8b26c51594b3345eff9f7da Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:52:55 +0200 Subject: [PATCH 21/39] refactor: remove unused imports --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 111b5c8..3a75b28 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -1,10 +1,5 @@ package io.github.vbetsch.codecracker; -import java.util.HashMap; -import java.util.Map; - -import static java.util.Map.entry; - public class CodeCracker { private final Cypher cypher = new Cypher(); From 25181dd189b036cd38a1fd3e635e862cf19649e2 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:57:38 +0200 Subject: [PATCH 22/39] refactor: create TranslationDictionary --- .../io/github/vbetsch/codecracker/Cypher.java | 41 +------------- .../codecracker/TranslationDictionary.java | 56 +++++++++++++++++++ 2 files changed, 59 insertions(+), 38 deletions(-) create mode 100644 src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java diff --git a/src/main/java/io/github/vbetsch/codecracker/Cypher.java b/src/main/java/io/github/vbetsch/codecracker/Cypher.java index 5ce0ff9..2744976 100644 --- a/src/main/java/io/github/vbetsch/codecracker/Cypher.java +++ b/src/main/java/io/github/vbetsch/codecracker/Cypher.java @@ -6,48 +6,13 @@ import static java.util.Map.entry; public class Cypher { - private final Map dictionary = Map.ofEntries( - entry('a', '!'), - entry('b', ')'), - entry('c', '"'), - entry('d', '('), - entry('e', '£'), - entry('f', '*'), - entry('g', '%'), - entry('h', '&'), - entry('i', '>'), - entry('j', '<'), - entry('k', '@'), - entry('l', 'a'), - entry('m', 'b'), - entry('n', 'c'), - entry('o', 'd'), - entry('p', 'e'), - entry('q', 'f'), - entry('r', 'g'), - entry('s', 'h'), - entry('t', 'i'), - entry('u', 'j'), - entry('v', 'k'), - entry('w', 'l'), - entry('x', 'm'), - entry('y', 'n'), - entry('z', 'o') - ); - - private static Map invertMap(Map map) { - Map inverted = new HashMap<>(); - for (Map.Entry entry : map.entrySet()) { - inverted.put(entry.getValue(), entry.getKey()); - } - return inverted; - } + private final TranslationDictionary dictionary = new TranslationDictionary(); public char decryptLetter(char letter) { - return dictionary.get(letter); + return dictionary.getDecryptions().get(letter); } public char encryptChar(char character) { - return invertMap(dictionary).get(character); + return dictionary.getEncryptions().get(character); } } diff --git a/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java b/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java new file mode 100644 index 0000000..d4833c0 --- /dev/null +++ b/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java @@ -0,0 +1,56 @@ +package io.github.vbetsch.codecracker; + +import java.util.HashMap; +import java.util.Map; + +import static java.util.Map.entry; + +public class TranslationDictionary { + + private final Map decryptions = Map.ofEntries( + entry('a', '!'), + entry('b', ')'), + entry('c', '"'), + entry('d', '('), + entry('e', '£'), + entry('f', '*'), + entry('g', '%'), + entry('h', '&'), + entry('i', '>'), + entry('j', '<'), + entry('k', '@'), + entry('l', 'a'), + entry('m', 'b'), + entry('n', 'c'), + entry('o', 'd'), + entry('p', 'e'), + entry('q', 'f'), + entry('r', 'g'), + entry('s', 'h'), + entry('t', 'i'), + entry('u', 'j'), + entry('v', 'k'), + entry('w', 'l'), + entry('x', 'm'), + entry('y', 'n'), + entry('z', 'o') + ); + + private final Map encryptions = invert(decryptions); + + public Map getDecryptions() { + return decryptions; + } + + public Map getEncryptions() { + return encryptions; + } + + private static Map invert(Map map) { + Map inverted = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + inverted.put(entry.getValue(), entry.getKey()); + } + return inverted; + } +} \ No newline at end of file From 4ab419ae90b5b998c532bb36b0a8df625d3d71f5 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 22:59:13 +0200 Subject: [PATCH 23/39] refactor: move decryptWord logic in Cypher --- .../io/github/vbetsch/codecracker/CodeCracker.java | 6 +----- .../java/io/github/vbetsch/codecracker/Cypher.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 3a75b28..3ceb7af 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -12,10 +12,6 @@ public char encryptChar(char character) { } public String decryptWord(String string) { - StringBuilder stringBuilder = new StringBuilder(); - for (char c : string.toCharArray()) { - stringBuilder.append(decryptLetter(c)); - } - return stringBuilder.toString(); + return cypher.decryptWord(string); } } \ No newline at end of file diff --git a/src/main/java/io/github/vbetsch/codecracker/Cypher.java b/src/main/java/io/github/vbetsch/codecracker/Cypher.java index 2744976..ecacae1 100644 --- a/src/main/java/io/github/vbetsch/codecracker/Cypher.java +++ b/src/main/java/io/github/vbetsch/codecracker/Cypher.java @@ -1,10 +1,5 @@ package io.github.vbetsch.codecracker; -import java.util.HashMap; -import java.util.Map; - -import static java.util.Map.entry; - public class Cypher { private final TranslationDictionary dictionary = new TranslationDictionary(); @@ -15,4 +10,12 @@ public char decryptLetter(char letter) { public char encryptChar(char character) { return dictionary.getEncryptions().get(character); } + + public String decryptWord(String string) { + StringBuilder stringBuilder = new StringBuilder(); + for (char c : string.toCharArray()) { + stringBuilder.append(decryptLetter(c)); + } + return stringBuilder.toString(); + } } From 0f0a25ed2f95b57fb9f9ae4af5b1c87ef4e3264b Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:00:50 +0200 Subject: [PATCH 24/39] refactor: remove Cypher --- .../vbetsch/codecracker/CodeCracker.java | 12 +++++++---- .../io/github/vbetsch/codecracker/Cypher.java | 21 ------------------- 2 files changed, 8 insertions(+), 25 deletions(-) delete mode 100644 src/main/java/io/github/vbetsch/codecracker/Cypher.java diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 3ceb7af..9372f75 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -1,17 +1,21 @@ package io.github.vbetsch.codecracker; public class CodeCracker { - private final Cypher cypher = new Cypher(); + private final TranslationDictionary dictionary = new TranslationDictionary(); public char decryptLetter(char letter) { - return cypher.decryptLetter(letter); + return dictionary.getDecryptions().get(letter); } public char encryptChar(char character) { - return cypher.encryptChar(character); + return dictionary.getEncryptions().get(character); } public String decryptWord(String string) { - return cypher.decryptWord(string); + StringBuilder stringBuilder = new StringBuilder(); + for (char c : string.toCharArray()) { + stringBuilder.append(decryptLetter(c)); + } + return stringBuilder.toString(); } } \ No newline at end of file diff --git a/src/main/java/io/github/vbetsch/codecracker/Cypher.java b/src/main/java/io/github/vbetsch/codecracker/Cypher.java deleted file mode 100644 index ecacae1..0000000 --- a/src/main/java/io/github/vbetsch/codecracker/Cypher.java +++ /dev/null @@ -1,21 +0,0 @@ -package io.github.vbetsch.codecracker; - -public class Cypher { - private final TranslationDictionary dictionary = new TranslationDictionary(); - - public char decryptLetter(char letter) { - return dictionary.getDecryptions().get(letter); - } - - public char encryptChar(char character) { - return dictionary.getEncryptions().get(character); - } - - public String decryptWord(String string) { - StringBuilder stringBuilder = new StringBuilder(); - for (char c : string.toCharArray()) { - stringBuilder.append(decryptLetter(c)); - } - return stringBuilder.toString(); - } -} From ffc99e44d3a18b47551bf96a092d98dfe8932b6e Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:03:45 +0200 Subject: [PATCH 25/39] test: should_returnLetterB_whenEncryptCharEndParenthesis --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 8b2fa03..399de3a 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -77,4 +77,16 @@ void should_returnLetterA_whenEncryptCharExclamationPoint() { // Assert assertEquals('a', encryptedExclamationPoint); } + + @Test + void should_returnLetterB_whenEncryptCharEndParenthesis() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + char encryptedExclamationPoint = codeCracker.encryptChar(')'); + + // Assert + assertEquals('b', encryptedExclamationPoint); + } } From df6a20655ca3ae004d0189ac61cc29e8ea1e3eb0 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:07:50 +0200 Subject: [PATCH 26/39] test: should_returnWordAB_whenEncryptExclamationPointAndEndParenthesis --- .../vbetsch/codecracker/CodeCrackerTest.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 399de3a..51c76fb 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -84,9 +84,22 @@ void should_returnLetterB_whenEncryptCharEndParenthesis() { CodeCracker codeCracker = new CodeCracker(); // Act - char encryptedExclamationPoint = codeCracker.encryptChar(')'); + char encryptedEndParenthesis = codeCracker.encryptChar(')'); // Assert - assertEquals('b', encryptedExclamationPoint); + assertEquals('b', encryptedEndParenthesis); + } + + @Test + void should_returnWordAB_whenEncryptExclamationPointAndEndParenthesis() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + String encryptedExclamationPointAndEndParenthesis = codeCracker.encryptString("!)"); + + // Assert + assertEquals("ab", encryptedExclamationPointAndEndParenthesis); + } } From 9e0b28651bcdf228d8e29e9186aef56ea9b99bd8 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:07:58 +0200 Subject: [PATCH 27/39] feat: create encryptString --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 9372f75..f4b4d9b 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -18,4 +18,12 @@ public String decryptWord(String string) { } return stringBuilder.toString(); } + + public String encryptString(String string) { + StringBuilder stringBuilder = new StringBuilder(); + for (char c : string.toCharArray()) { + stringBuilder.append(encryptChar(c)); + } + return stringBuilder.toString(); + } } \ No newline at end of file From 4094e5d0514e78f18a94b5310c4a089922d5ec31 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:11:12 +0200 Subject: [PATCH 28/39] fix: direction --- .../codecracker/TranslationDictionary.java | 52 +++++++++---------- .../vbetsch/codecracker/CodeCrackerTest.java | 32 ++++++------ 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java b/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java index d4833c0..d35a3a5 100644 --- a/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java +++ b/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java @@ -8,32 +8,32 @@ public class TranslationDictionary { private final Map decryptions = Map.ofEntries( - entry('a', '!'), - entry('b', ')'), - entry('c', '"'), - entry('d', '('), - entry('e', '£'), - entry('f', '*'), - entry('g', '%'), - entry('h', '&'), - entry('i', '>'), - entry('j', '<'), - entry('k', '@'), - entry('l', 'a'), - entry('m', 'b'), - entry('n', 'c'), - entry('o', 'd'), - entry('p', 'e'), - entry('q', 'f'), - entry('r', 'g'), - entry('s', 'h'), - entry('t', 'i'), - entry('u', 'j'), - entry('v', 'k'), - entry('w', 'l'), - entry('x', 'm'), - entry('y', 'n'), - entry('z', 'o') + entry('!', 'a'), + entry(')', 'b'), + entry('"', 'c'), + entry('(', 'd'), + entry('£', 'e'), + entry('*', 'f'), + entry('%', 'g'), + entry('&', 'h'), + entry('>', 'i'), + entry('<', 'j'), + entry('@', 'k'), + entry('a', 'l'), + entry('b', 'm'), + entry('c', 'n'), + entry('d', 'o'), + entry('e', 'p'), + entry('f', 'q'), + entry('g', 'r'), + entry('h', 's'), + entry('i', 't'), + entry('j', 'u'), + entry('k', 'v'), + entry('l', 'w'), + entry('m', 'x'), + entry('n', 'y'), + entry('o', 'z') ); private final Map encryptions = invert(decryptions); diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 51c76fb..8427ea1 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -12,10 +12,10 @@ void should_returnExclamationPoint_whenDecryptLetterA() { CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedLetterA = codeCracker.decryptLetter('a'); + char decryptedLetterA = codeCracker.decryptLetter('!'); // Assert - assertEquals('!', decryptedLetterA); + assertEquals('a', decryptedLetterA); } @Test @@ -24,10 +24,10 @@ void should_returnEndParenthesis_whenDecryptLetterB() { CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedLetterA = codeCracker.decryptLetter('b'); + char decryptedLetterA = codeCracker.decryptLetter(')'); // Assert - assertEquals(')', decryptedLetterA); + assertEquals('b', decryptedLetterA); } @Test @@ -36,10 +36,10 @@ void should_returnExclamationPointAndEndParenthesis_whenDecryptWordAB() { CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptWord("ab"); + String decryptedString = codeCracker.decryptWord("!)"); // Assert - assertEquals("!)", decryptedString); + assertEquals("ab", decryptedString); } @Test @@ -48,10 +48,10 @@ void should_returnCorrectString_whenDecryptWordHello() { CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptWord("hello"); + String decryptedString = codeCracker.decryptWord("&£aad"); // Assert - assertEquals("&£aad", decryptedString); + assertEquals("hello", decryptedString); } @Test @@ -60,10 +60,10 @@ void should_returnCorrectString_whenDecryptWordWorld() { CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptWord("world"); + String decryptedString = codeCracker.decryptWord("ldga("); // Assert - assertEquals("ldga(", decryptedString); + assertEquals("world", decryptedString); } @Test @@ -72,10 +72,10 @@ void should_returnLetterA_whenEncryptCharExclamationPoint() { CodeCracker codeCracker = new CodeCracker(); // Act - char encryptedExclamationPoint = codeCracker.encryptChar('!'); + char encryptedExclamationPoint = codeCracker.encryptChar('a'); // Assert - assertEquals('a', encryptedExclamationPoint); + assertEquals('!', encryptedExclamationPoint); } @Test @@ -84,10 +84,10 @@ void should_returnLetterB_whenEncryptCharEndParenthesis() { CodeCracker codeCracker = new CodeCracker(); // Act - char encryptedEndParenthesis = codeCracker.encryptChar(')'); + char encryptedEndParenthesis = codeCracker.encryptChar('b'); // Assert - assertEquals('b', encryptedEndParenthesis); + assertEquals(')', encryptedEndParenthesis); } @Test @@ -96,10 +96,10 @@ void should_returnWordAB_whenEncryptExclamationPointAndEndParenthesis() { CodeCracker codeCracker = new CodeCracker(); // Act - String encryptedExclamationPointAndEndParenthesis = codeCracker.encryptString("!)"); + String encryptedExclamationPointAndEndParenthesis = codeCracker.encryptString("ab"); // Assert - assertEquals("ab", encryptedExclamationPointAndEndParenthesis); + assertEquals("!)", encryptedExclamationPointAndEndParenthesis); } } From a1ece7e1ac52c1c5560b1521c3b9d3372893b269 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:19:49 +0200 Subject: [PATCH 29/39] fix: semantic --- .../vbetsch/codecracker/CodeCracker.java | 10 ++--- .../vbetsch/codecracker/CodeCrackerTest.java | 42 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index f4b4d9b..cafb09d 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -3,18 +3,18 @@ public class CodeCracker { private final TranslationDictionary dictionary = new TranslationDictionary(); - public char decryptLetter(char letter) { + public char decryptChar(char letter) { return dictionary.getDecryptions().get(letter); } - public char encryptChar(char character) { + public char encryptLetter(char character) { return dictionary.getEncryptions().get(character); } - public String decryptWord(String string) { + public String decryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { - stringBuilder.append(decryptLetter(c)); + stringBuilder.append(decryptChar(c)); } return stringBuilder.toString(); } @@ -22,7 +22,7 @@ public String decryptWord(String string) { public String encryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char c : string.toCharArray()) { - stringBuilder.append(encryptChar(c)); + stringBuilder.append(encryptLetter(c)); } return stringBuilder.toString(); } diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 8427ea1..d63ca05 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -7,99 +7,99 @@ class CodeCrackerTest { @Test - void should_returnExclamationPoint_whenDecryptLetterA() { + void should_returnLetterA_whenDecryptExclamationPoint() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedLetterA = codeCracker.decryptLetter('!'); + char decryptedExclamationPoint = codeCracker.decryptChar('!'); // Assert - assertEquals('a', decryptedLetterA); + assertEquals('a', decryptedExclamationPoint); } @Test - void should_returnEndParenthesis_whenDecryptLetterB() { + void should_returnLetterB_whenDecryptEndParenthesis() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - char decryptedLetterA = codeCracker.decryptLetter(')'); + char decryptedEndParenthesis = codeCracker.decryptChar(')'); // Assert - assertEquals('b', decryptedLetterA); + assertEquals('b', decryptedEndParenthesis); } @Test - void should_returnExclamationPointAndEndParenthesis_whenDecryptWordAB() { + void should_returnWordAB_whenDecryptExclamationPointAndEndParenthesis() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptWord("!)"); + String decryptedString = codeCracker.decryptString("!)"); // Assert assertEquals("ab", decryptedString); } @Test - void should_returnCorrectString_whenDecryptWordHello() { + void should_returnWordHello() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptWord("&£aad"); + String decryptedString = codeCracker.decryptString("&£aad"); // Assert assertEquals("hello", decryptedString); } @Test - void should_returnCorrectString_whenDecryptWordWorld() { + void should_returnWordWorld() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - String decryptedString = codeCracker.decryptWord("ldga("); + String decryptedString = codeCracker.decryptString("ldga("); // Assert assertEquals("world", decryptedString); } @Test - void should_returnLetterA_whenEncryptCharExclamationPoint() { + void should_returnExclamationPoint_whenEncryptLetterA() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - char encryptedExclamationPoint = codeCracker.encryptChar('a'); + char encryptedLetterA = codeCracker.encryptLetter('a'); // Assert - assertEquals('!', encryptedExclamationPoint); + assertEquals('!', encryptedLetterA); } @Test - void should_returnLetterB_whenEncryptCharEndParenthesis() { + void should_returnEndParenthesis_whenEncryptLetterB() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - char encryptedEndParenthesis = codeCracker.encryptChar('b'); + char encryptedLetterB = codeCracker.encryptLetter('b'); // Assert - assertEquals(')', encryptedEndParenthesis); + assertEquals(')', encryptedLetterB); } @Test - void should_returnWordAB_whenEncryptExclamationPointAndEndParenthesis() { + void should_returnExclamationPointAndEndParenthesis_whenEncryptWordAB() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - String encryptedExclamationPointAndEndParenthesis = codeCracker.encryptString("ab"); + String encryptedWordAB = codeCracker.encryptString("ab"); // Assert - assertEquals("!)", encryptedExclamationPointAndEndParenthesis); + assertEquals("!)", encryptedWordAB); } } From 469060d900c54cd35aeb54043f46871dd90e1d3b Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:24:15 +0200 Subject: [PATCH 30/39] fix: semantic --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index d63ca05..49f4621 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -43,7 +43,7 @@ void should_returnWordAB_whenDecryptExclamationPointAndEndParenthesis() { } @Test - void should_returnWordHello() { + void should_decryptWordHello() { // Arrange CodeCracker codeCracker = new CodeCracker(); @@ -55,7 +55,7 @@ void should_returnWordHello() { } @Test - void should_returnWordWorld() { + void should_decryptWordWorld() { // Arrange CodeCracker codeCracker = new CodeCracker(); @@ -91,15 +91,14 @@ void should_returnEndParenthesis_whenEncryptLetterB() { } @Test - void should_returnExclamationPointAndEndParenthesis_whenEncryptWordAB() { + void should_returnExclamationPointAndEndParenthesis_whenEncryptAB() { // Arrange CodeCracker codeCracker = new CodeCracker(); // Act - String encryptedWordAB = codeCracker.encryptString("ab"); + String encryptedAB = codeCracker.encryptString("ab"); // Assert - assertEquals("!)", encryptedWordAB); - + assertEquals("!)", encryptedAB); } } From ebed67513c6ba5d19ab7d83493730f0db28e8d65 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:24:30 +0200 Subject: [PATCH 31/39] test: add should_encryptWordHello and should_encryptWordWorld --- .../vbetsch/codecracker/CodeCrackerTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 49f4621..1fe5203 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -101,4 +101,28 @@ void should_returnExclamationPointAndEndParenthesis_whenEncryptAB() { // Assert assertEquals("!)", encryptedAB); } + + @Test + void should_encryptWordHello() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + String encryptedAB = codeCracker.encryptString("hello"); + + // Assert + assertEquals("&£aad", encryptedAB); + } + + @Test + void should_encryptWordWorld() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + String encryptedAB = codeCracker.encryptString("world"); + + // Assert + assertEquals("ldga(", encryptedAB); + } } From d98af3d0a4db59b870039d1885dd57c52bd3ffc4 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:28:03 +0200 Subject: [PATCH 32/39] fix: semantic --- .../io/github/vbetsch/codecracker/CodeCrackerTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index 1fe5203..c24f7de 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -108,10 +108,10 @@ void should_encryptWordHello() { CodeCracker codeCracker = new CodeCracker(); // Act - String encryptedAB = codeCracker.encryptString("hello"); + String encryptedHello = codeCracker.encryptString("hello"); // Assert - assertEquals("&£aad", encryptedAB); + assertEquals("&£aad", encryptedHello); } @Test @@ -120,9 +120,9 @@ void should_encryptWordWorld() { CodeCracker codeCracker = new CodeCracker(); // Act - String encryptedAB = codeCracker.encryptString("world"); + String encryptedWorld = codeCracker.encryptString("world"); // Assert - assertEquals("ldga(", encryptedAB); + assertEquals("ldga(", encryptedWorld); } } From 7907b5ddd5d8000bf497391814cf668e555e7f5a Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:31:55 +0200 Subject: [PATCH 33/39] feat: app code --- .../java/io/github/vbetsch/codecracker/Main.java | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/Main.java b/src/main/java/io/github/vbetsch/codecracker/Main.java index 7a2707e..dcc61fb 100644 --- a/src/main/java/io/github/vbetsch/codecracker/Main.java +++ b/src/main/java/io/github/vbetsch/codecracker/Main.java @@ -1,17 +1,9 @@ package io.github.vbetsch.codecracker; -//TIP To Run code, press or -// click the icon in the gutter. public class Main { static void main() { - //TIP Press with your caret at the highlighted text - // to see how IntelliJ IDEA suggests fixing it. - IO.println(String.format("Hello and welcome!")); - - for (int i = 1; i <= 5; i++) { - //TIP Press to start debugging your code. We have set one breakpoint - // for you, but you can always add more by pressing . - IO.println("i = " + i); - } + CodeCracker codeCracker = new CodeCracker(); + IO.println(String.format("Hello world!")); + System.out.println("Encrypted : " + codeCracker.encryptString("helloworld")); } } From 284983736671b168a4487cf8f8d89103326a5f20 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:35:19 +0200 Subject: [PATCH 34/39] refactor: fix names --- .../java/io/github/vbetsch/codecracker/CodeCracker.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index cafb09d..2c9eb5b 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -13,16 +13,16 @@ public char encryptLetter(char character) { public String decryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); - for (char c : string.toCharArray()) { - stringBuilder.append(decryptChar(c)); + for (char character : string.toCharArray()) { + stringBuilder.append(decryptChar(character)); } return stringBuilder.toString(); } public String encryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); - for (char c : string.toCharArray()) { - stringBuilder.append(encryptLetter(c)); + for (char character : string.toCharArray()) { + stringBuilder.append(encryptLetter(character)); } return stringBuilder.toString(); } From 8a2ea32bfcefb299ab1875685aed7b0f221f827f Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:36:16 +0200 Subject: [PATCH 35/39] test: should_handleUpperCaseInEncrypt --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index c24f7de..b6ea6fc 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -125,4 +125,17 @@ void should_encryptWordWorld() { // Assert assertEquals("ldga(", encryptedWorld); } + + @Test + void should_handleUpperCaseInEncrypt() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + + // Act + String encryptedHello = codeCracker.encryptString("Hello"); + + // Assert + assertEquals("&£aad", encryptedHello); + + } } From 85419ad875589bf964dcfd106f47631927de793f Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:36:34 +0200 Subject: [PATCH 36/39] feat: handle upper case --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 2 +- src/main/java/io/github/vbetsch/codecracker/Main.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 2c9eb5b..a01478f 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -22,7 +22,7 @@ public String decryptString(String string) { public String encryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char character : string.toCharArray()) { - stringBuilder.append(encryptLetter(character)); + stringBuilder.append(encryptLetter(Character.toLowerCase(character))); } return stringBuilder.toString(); } diff --git a/src/main/java/io/github/vbetsch/codecracker/Main.java b/src/main/java/io/github/vbetsch/codecracker/Main.java index dcc61fb..b56844b 100644 --- a/src/main/java/io/github/vbetsch/codecracker/Main.java +++ b/src/main/java/io/github/vbetsch/codecracker/Main.java @@ -4,6 +4,6 @@ public class Main { static void main() { CodeCracker codeCracker = new CodeCracker(); IO.println(String.format("Hello world!")); - System.out.println("Encrypted : " + codeCracker.encryptString("helloworld")); + System.out.println("Encrypted : " + codeCracker.encryptString("Helloworld")); } } From 8b870f6f38aabdb5da06f62c3aa84a761e8c795b Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:44:36 +0200 Subject: [PATCH 37/39] test: should_handleUnknownCharacters --- .../github/vbetsch/codecracker/CodeCrackerTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java index b6ea6fc..1cba55a 100644 --- a/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java +++ b/src/test/java/io/github/vbetsch/codecracker/CodeCrackerTest.java @@ -136,6 +136,17 @@ void should_handleUpperCaseInEncrypt() { // Assert assertEquals("&£aad", encryptedHello); + } + + @Test + void should_handleUnknownCharacters() { + // Arrange + CodeCracker codeCracker = new CodeCracker(); + // Act + String encryptedHello = codeCracker.encryptString("Hello !"); + + // Assert + assertEquals("&£aad", encryptedHello); } } From e6d2c4c1e911238e0f5d0e0ee58c47fc5c2670b9 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:45:04 +0200 Subject: [PATCH 38/39] feat: handle unknown characters --- .../github/vbetsch/codecracker/CodeCracker.java | 1 + .../java/io/github/vbetsch/codecracker/Main.java | 2 +- .../codecracker/TranslationDictionary.java | 16 ++++++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index a01478f..7bd6162 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -22,6 +22,7 @@ public String decryptString(String string) { public String encryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char character : string.toCharArray()) { + if (!dictionary.containsDecryptionValue(Character.toLowerCase(character))) continue; stringBuilder.append(encryptLetter(Character.toLowerCase(character))); } return stringBuilder.toString(); diff --git a/src/main/java/io/github/vbetsch/codecracker/Main.java b/src/main/java/io/github/vbetsch/codecracker/Main.java index b56844b..175fa21 100644 --- a/src/main/java/io/github/vbetsch/codecracker/Main.java +++ b/src/main/java/io/github/vbetsch/codecracker/Main.java @@ -4,6 +4,6 @@ public class Main { static void main() { CodeCracker codeCracker = new CodeCracker(); IO.println(String.format("Hello world!")); - System.out.println("Encrypted : " + codeCracker.encryptString("Helloworld")); + System.out.println("Encrypted : " + codeCracker.encryptString("Hello world!")); } } diff --git a/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java b/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java index d35a3a5..5a7b0eb 100644 --- a/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java +++ b/src/main/java/io/github/vbetsch/codecracker/TranslationDictionary.java @@ -38,6 +38,14 @@ public class TranslationDictionary { private final Map encryptions = invert(decryptions); + private static Map invert(Map map) { + Map inverted = new HashMap<>(); + for (Map.Entry entry : map.entrySet()) { + inverted.put(entry.getValue(), entry.getKey()); + } + return inverted; + } + public Map getDecryptions() { return decryptions; } @@ -46,11 +54,7 @@ public Map getEncryptions() { return encryptions; } - private static Map invert(Map map) { - Map inverted = new HashMap<>(); - for (Map.Entry entry : map.entrySet()) { - inverted.put(entry.getValue(), entry.getKey()); - } - return inverted; + public boolean containsDecryptionValue(char letter) { + return decryptions.containsValue(letter); } } \ No newline at end of file From 882a33ab04e4ac023995bfc02ef5848194ce4245 Mon Sep 17 00:00:00 2001 From: vbetsch Date: Tue, 30 Jun 2026 23:47:13 +0200 Subject: [PATCH 39/39] refactor: create lowerCaseChar var --- src/main/java/io/github/vbetsch/codecracker/CodeCracker.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java index 7bd6162..0fc4cf0 100644 --- a/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java +++ b/src/main/java/io/github/vbetsch/codecracker/CodeCracker.java @@ -22,8 +22,9 @@ public String decryptString(String string) { public String encryptString(String string) { StringBuilder stringBuilder = new StringBuilder(); for (char character : string.toCharArray()) { - if (!dictionary.containsDecryptionValue(Character.toLowerCase(character))) continue; - stringBuilder.append(encryptLetter(Character.toLowerCase(character))); + char lowerCaseChar = Character.toLowerCase(character); + if (!dictionary.containsDecryptionValue(lowerCaseChar)) continue; + stringBuilder.append(encryptLetter(lowerCaseChar)); } return stringBuilder.toString(); }