mirror of
https://github.com/Noratrieb/knacken.git
synced 2026-01-14 15:25:05 +01:00
knacken
This commit is contained in:
commit
de8c5f3deb
2 changed files with 130 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
.idea
|
||||
*.iml
|
||||
/out
|
||||
127
src/Caesar.java
Normal file
127
src/Caesar.java
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class Caesar {
|
||||
public static void main(String[] args) {
|
||||
// System.out.println(normal("dies ist die erste uebung zum verschluesseln von mitteilungen", 9));
|
||||
|
||||
// System.out.println(withAlphabet("die verschluesselung mit dem kunterbunten geheimalphabet",
|
||||
// "LPAIQJBCTRWZYDSKEGFXHUONVM"));
|
||||
|
||||
// System.out.println(keyword("die matura wird nach sechs jahren gymnasium abgelegt", "kantonsschule"));
|
||||
|
||||
System.out.println(knacken("""
|
||||
EHSSC NMVVPS FU YWP VM UVHSV EFU OFOVE CPHS HV EMTZHSVU
|
||||
UREMMJ MO ZFVRERSHOV HLY ZFDHSYSC. EMZPXPS, ZEHV EHSSC FU
|
||||
HAMWV VM YFURMXPS FL EFU LPZ CPHS HV EMTZHSVU ZFJJ VWSL EFU
|
||||
ZMSJY WNUFYP YMZL…"""));
|
||||
/*knacken2("""
|
||||
XDY IKJKAHMCALYQDPECY SYOPECHRYPPYHRJB DPQ DI WYDQAHQYO XYP
|
||||
EKIMRQYOP JDECQ IYCO AGQRYHH. PDY DPQ SDYH WR YDJZAEC WR
|
||||
GJAEGYJ RJX PKIDQ ZRYO XYJ PDECYOYJ XAQYJARPQARPEC JDECQ
|
||||
BYYDBJYQ""");*/
|
||||
}
|
||||
|
||||
static String normal(String s, int shift) {
|
||||
return s.toLowerCase().chars()
|
||||
.map(c -> {
|
||||
if (isAlpha(c)) {
|
||||
int n = c + shift;
|
||||
if (n > Z) {
|
||||
n = (96 + (n - Z));
|
||||
}
|
||||
return n;
|
||||
}
|
||||
return c;
|
||||
})
|
||||
.mapToObj(i -> String.valueOf((char) i))
|
||||
.collect(Collectors.joining());
|
||||
}
|
||||
|
||||
static String withAlphabet(String s, String alphabet) {
|
||||
final String a = alphabet.toLowerCase();
|
||||
return s.toLowerCase().chars()
|
||||
.map(c -> {
|
||||
if (isAlpha(c)) {
|
||||
int index = c - A;
|
||||
return a.charAt(index);
|
||||
}
|
||||
return c;
|
||||
})
|
||||
.mapToObj(i -> String.valueOf((char) i))
|
||||
.collect(Collectors.joining());
|
||||
}
|
||||
|
||||
private static final char Z = 122;
|
||||
private static final char A = 97;
|
||||
|
||||
static String keyword(String s, String keyword) {
|
||||
StringBuilder a = new StringBuilder();
|
||||
for (char c : keyword.toCharArray()) {
|
||||
if (!a.toString().contains(String.valueOf(c))) {
|
||||
a.append(c);
|
||||
}
|
||||
}
|
||||
int last = keyword.charAt(keyword.length() - 1);
|
||||
for (int i = last + 1; i <= Z; i++) {
|
||||
if (!a.toString().contains(String.valueOf((char) i))) {
|
||||
a.append((char) i);
|
||||
}
|
||||
}
|
||||
for (int i = A; i < last; i++) {
|
||||
if (!a.toString().contains(String.valueOf((char) i))) {
|
||||
a.append((char) i);
|
||||
}
|
||||
}
|
||||
|
||||
return withAlphabet(s, a.toString());
|
||||
}
|
||||
|
||||
private static final String BUCHSTABEN = "enirsatdhulgocmbfwkzpvjyxq";
|
||||
private static final String LETTERS = "etaoinsrhldcumfpgwybvkxjqz";
|
||||
|
||||
static String knacken(String s) {
|
||||
HashMap<Character, Integer> chars = new HashMap<>();
|
||||
|
||||
s.toLowerCase().chars()
|
||||
.filter(Caesar::isAlpha)
|
||||
.forEach(c -> chars.merge((char) c, 1, Integer::sum));
|
||||
|
||||
// list an allen chars sortiert nach reihenfolge
|
||||
List<Character> list = chars.entrySet().stream()
|
||||
.sorted((e1, e2) -> Integer.compare(e2.getValue(), e1.getValue()))
|
||||
.map(Map.Entry::getKey)
|
||||
.toList();
|
||||
|
||||
for (char character : s.toCharArray()) {
|
||||
if (list.contains((character))) {
|
||||
System.err.println("wtf " + character);
|
||||
}
|
||||
}
|
||||
|
||||
List<Character> expected = new ArrayList<>();
|
||||
LETTERS.chars().forEach(c -> expected.add((char) c));
|
||||
|
||||
|
||||
return s.toLowerCase().chars()
|
||||
.map(c -> {
|
||||
if (!isAlpha(c)) {
|
||||
return c;
|
||||
}
|
||||
return expected.get(list.indexOf((char) c));
|
||||
})
|
||||
.mapToObj(i -> String.valueOf((char) i))
|
||||
.collect(Collectors.joining());
|
||||
}
|
||||
|
||||
static void knacken2(String s) {
|
||||
for (int i = 0; i < 26; i++) {
|
||||
System.out.println(normal(s, i));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static boolean isAlpha(int c) {
|
||||
return c <= 122 && c >= 97;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue