aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2024-12-29 01:50:10 +0100
committerFlorian Fischer <florian.fischer@muhq.space>2024-12-29 01:50:10 +0100
commit69ba041d9962bd2e55e1ab042c90c9c5f8875d42 (patch)
tree9252339f503f494ab230d95e1f4a5864ea0b7777
parentca45d611f77fe12bf92e905ba7f7a97265dfb754 (diff)
downloadunterricht-69ba041d9962bd2e55e1ab042c90c9c5f8875d42.tar.gz
unterricht-69ba041d9962bd2e55e1ab042c90c9c5f8875d42.zip
add caesar / pink panther exercise
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/.gitignore2
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/Makefile11
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/SymCrypt.json1
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/SymCryptLsg.json1
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/leicht.md85
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/pandoc-template.html50
-rw-r--r--Info/11/NTG/2/Caesar-Implementierung/schwer.md115
7 files changed, 265 insertions, 0 deletions
diff --git a/Info/11/NTG/2/Caesar-Implementierung/.gitignore b/Info/11/NTG/2/Caesar-Implementierung/.gitignore
new file mode 100644
index 00000000..34cd08b2
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/.gitignore
@@ -0,0 +1,2 @@
+leicht.html
+schwer.html
diff --git a/Info/11/NTG/2/Caesar-Implementierung/Makefile b/Info/11/NTG/2/Caesar-Implementierung/Makefile
new file mode 100644
index 00000000..41b82dc7
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/Makefile
@@ -0,0 +1,11 @@
+SRC := leicht.md schwer.md
+HTML := $(SRC:.md=.html)
+
+.PHONY: all
+all: $(HTML)
+
+%.html: %.md pandoc-template.html
+ pandoc -s --template=pandoc-template.html $< -o $@
+
+clean:
+ rm -rf $(HTML)
diff --git a/Info/11/NTG/2/Caesar-Implementierung/SymCrypt.json b/Info/11/NTG/2/Caesar-Implementierung/SymCrypt.json
new file mode 100644
index 00000000..5945fe5d
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/SymCrypt.json
@@ -0,0 +1 @@
+{"name":"SymCrypt","modules":[{"name":"CaesarLeicht","text":"/**\n * Implementierung des Caesar-Verfahrens\n * \n * Die Klasse bietet statische Methoden zum ver- und entschluesseln\n * von Text mithilfe des Caesar-Verfahrens an.\n */\nclass CaesarLeicht {\n /**\n * Allgemeine Methode die eine Eingabe im Alphabet verschiebt\n * \n * Das Alphabet besteht dabei nur aus Kleinbuchstaben ([a-z]).\n * Die Verschiebung muss dabei nur nach rechts.\n * \n * @param eingabe Der Eingabetext\n * @param verschiebung Die Verschiebung im Alphabet\n * @return Der Text indem jedes Zeichen um verschiebung verschoben wurde\n */\n static String caesar(String eingabe, int verschiebung) {\n String output = \"\";\n // TODO: Implementiere die Methode anhand ihrer Beschreibung\n // Tipps gibts unter:\n // https://schule.muhq.space/panther/leicht.html\n \n return output;\n }\n\n /**\n * Verschluesselt einen Text mit dem Caesar-Verfahren\n * \n * @param klartext Der zuverschluesselnde Klartext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der verschluesselte Geheimtext\n */\n static String verschluesseln(String klartext, int schluessel) {\n return caesar(klartext, schluessel);\n }\n\n /**\n * Entschluesselt einen Gehimtext mit dem Caesar-Verfahren\n * \n * @param geheimtext Der zuentschluesselnde Geheimtext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der entschluesselte Klartext\n */\n static String entschluesseln(String geheimtext, int schluessel) {\n return caesar(geheimtext, 26 - schluessel);\n }\n}","identical_to_repository_version":true,"is_copy_of_id":1618303,"repository_file_version":3},{"name":"Story","text":"class Story {\n static long djb2Hash(String s) {\n long hash = 5381;\n for (int i = 0; i < s.length(); i++) {\n hash = ((hash << 5) + hash) + (int)s.charAt(i); \n }\n return hash;\n }\n\n static void run() {\n Story.intro();\n if(Story.aufgabenAuswahl().equalsIgnoreCase(\"schwer\")) {\n Story.aufgabeSchwer();\n } else {\n Story.aufgabeLeicht();\n }\n Story.ende();\n }\n\n static void intro() {\n Panther.sagt(\"\"\"\n\nDu musst mir helfen!\nJemand hat mich gestohlen.\nUm sicher zu sein, dass du mir\nhelfen kannst, beantworte\nfolgende Frage:\nzhofkh idueh kdeh lfk?\n\"\"\");\n\n if(djb2Hash(Input.readString(\"Antwort:\").toLowerCase()) != 2090616631) { System.exit(1); }\n\n }\n \n static String aufgabenAuswahl() {\n Panther.sagt(\"\"\"\nVoellig korrekt!\nIch sehe schon du bist\ngeeignet. Der Dieb hat\nverschluesselte Nachrichten\nhinterlassen. Ich vermute er\nverwendet das Caesar-Verfahren.\nDu musst das Caesar-Verfahren\nimplementieren, um die\nNachrichten zu entschluesseln.\n\"\"\");\n\n return Input.readString(\"Willst du es leicht oder schwer?: \");\n }\n \n static void uhr() {\n println(\"\"\"\n\n\nDie Uhr am Tatort:\n _____\n _.'_____`._\n .'.-' 12 `-.`.\n /,' 11 1 `.\\\\\\\n // 10 / 2 \\\\\\\\\\\\\n;; / ::\n|| 9 ----O 3 ||\n:: ;;\n \\\\\\\\\\\\ 8 4 //\n \\\\\\`. 7 5 ,'/\n '.`-.__6__.-'.'\n ((-._____.-))\n _)) ((_\n '--' '--'\n\"\"\");\n }\n\n static void aufgabeLeicht() {\n Panther.sagt(\"\"\"\n\nDu hast dich fuer 'leicht' entschieden.\nGut ich weiss naemlich, dass\nder Dieb nur die 26 Kleinbuchstaben\nunseres Alphabets verwendet.\n\nErgaenze die Methode caesar in der\nKlasse Caesar, so dass sie mit allen 26\nKleinbuchstaben funktioniert.\n\n\n\"\"\");\n\n println(\"\"\"\n\nWeitere Tipps findest du unter:\nhttps://schule.muhq.space/panther/leicht.html\n\"\"\");\n\n if(djb2Hash(CaesarLeicht.entschluesseln(\"ghu jroghqh uhlwhu\", 3)) != 3019481481) {\n println(\"Deine caesar Implementierung ist leider noch nicht korrekt.\");\n println(\"Der Ort des rosaroten Panther ist immer noch unbekannt.\");\n System.exit(1);\n }\n\n println();\n Panther.sagt(\"\"\"\nSehr gut! Den ersten Hinweis\n'der goldene reiter' konnten\nwir entschluesseln.\n\nDer Dieb hat am Tatort an\nder Uhr gedreht!\nEntschluessle den zweiten Hinweis:\n\n'nbocnox qbklox'\n\"\"\");\n\n uhr();\n \n if(djb2Hash(Input.readString(\"Hinweis:\")) != -2553580551) {\n println(\"Der Hinweis ist nicht korrekt.\");\n println(\"Hast du den passend Schluessel verwendet?\");\n System.exit(1);\n }\n }\n\n static void aufgabeSchwer() {\n Panther.sagt(\"\"\"\nDu hast dich fuer 'schwer' entschieden.\nDas ist auch noetig, denn\nder Dieb verwendet alle schreibbaren\nBuchstaben der ASCII-Tabelle [1].\n\nErgaenze die Methode caesar in der\nKlasse CaesarSchwer, so dass sie mit\nallen schreibbaren ASCII Zeichen und\nin beide Richtungen funktioniert.\n\n[1]: https://bycs.link/Roqmvh\n\"\"\");\n\n println(\"\"\"\n\nWeitere Tipps findest du unter:\nhttps://schule.muhq.space/panther/schwer.html\n\nDer Dieb hat wohl seinen Passwort-\nZettel am Tatort verloren.\n ______________________________\n / \\\\\\ \\\\\\.\n| | |.\n \\\\\\_ | Passwort: |.\n | M[]nA.-5]a+ |.\n | |.\n | Hinweis: |.\n | Antwort auf die endgültige |.\n | Frage nach dem Leben, |.\n | dem Universum und |.\n | dem ganzen Rest |.\n | |.\n | _________________________|___\n | / /.\n \\\\\\_/____________________________/.\n\"\"\");\n\n if(djb2Hash(CaesarSchwer.entschluesseln(\"M[]nA.-5]a+\",\n Input.readInt(\"Antwort auf die endgültige Frage nach dem Leben, dem Universum und dem ganzen Rest:\"))) != -42961670) {\n println(\"Deine caesar Implementierung ist leider noch nicht korrekt\");\n println(\"oder der Schluessel ist noch falsch.\");\n println(\"Das Passwort des Diebes ist weiterhin geheim.\");\n System.exit(1);\n }\n \n println();\n Panther.sagt(\"\"\"\nSehr gut wir haben das Passwort:\n#13Dubai37_\n\nDamit habe ich die Beschreibung\ndes Verstecks gefunden:\n\nWx' W|t\"t#) ()xv~) |# x|#x\"\nfv{!|x((ytv{ t\" Zt'x w* a$'wA\nWx# fv{!*x((x! {tux |v{ \"|) wx\"\nY!*z XmlEGFI +$# VWZ #tv{ _ga zx(v{|v~)A\n\n\nAusserdem ist mir aufgefallen,\ndass der Dieb am Tatort\nan der Uhr gedreht hat.\n\"\"\");\n\n uhr();\n\n String antwort = Input.readString(\"Wohin muessen wir Interpol schicken?\");\n if(djb2Hash(antwort.toLowerCase()) != 199414383) {\n println(\"Interpol findet leider nichts in \" + antwort);\n System.exit(1);\n }\n }\n \n static void ende() {\n String feuerwerk = \"\"\"\n .''.\n .''. . *''* :_\\\\\\/_: .\n :_\\\\\\/_: _\\\\\\(/_ .:.*_\\\\\\/_* : /\\\\\\ : .'.:.'.\n .''.: /\\\\\\ : ./)\\\\\\ ':'* /\\\\\\ * : '..'. -=:o:=-\n :_\\\\\\/_:'.:::. ' *''* * '.\\\\\\'/.' _\\\\\\(/_'.':'.'\n : /\\\\\\ : ::::: *_\\\\\\/_* -= o =- /)\\\\\\ ' *\n '..' ':::' * /\\\\\\ * .'/.\\\\\\'. '\n * *..* :\n *\n *\n \"\"\";\n println(\"\");\n println(\"Geschafft!\");\n println(\"Die Polizei hat dank deiner Hilfe\");\n println(\"den rosaroten Panther gefunden!\");\n println(\"Ganz Frankreich dankt Dir.\");\n println(feuerwerk);\n \n }\n}\n\n \nclass Panther {\n static final String[] gesicht = \"\"\"\n .--. .--. \n ( (`\\\\\\\\\\\\.\"--``--\".//`) ) \n '-. __ __ .-' \n / /__\\\\\\ /__\\\\\\ \\\\\\ \n | \\\\\\ 0/ \\\\\\ 0/ | \n \\\\\\ `/ \\\\\\` / \n `-. /-\\\"\\\"\\\"-\\\\\\ .-` \n / '.___.' \\\\\\ \n \\\\\\ I / \n `;--'`'--;` \n '.___.' \n\"\"\".split(\"\\\\r?\\\\n\");\n \n static void sagt(String nachricht) {\n String[] zeilen = nachricht.split(\"\\\\r?\\\\n\");\n for (int i = 0; i < Math.max(gesicht.length, zeilen.length); i++) {\n String zeile = \"\";\n if(i < gesicht.length) {\n zeile = gesicht[i];\n } else {\n zeile = \"\";\n }\n \n if(i < zeilen.length) {\n zeile += zeilen[i]; \n }\n println(zeile);\n }\n }\n}\n\nStory.run();","identical_to_repository_version":false,"is_copy_of_id":1618304,"repository_file_version":1},{"name":"CaesarSchwer","text":"/**\n * Implementierung des Caesar-Verfahrens\n * \n * Die Klasse bietet statische Methoden zum ver- und entschluesseln\n * von Text mithilfe des Caesar-Verfahrens an.\n */\nclass CaesarSchwer {\n /**\n * Das gesamte schreibbare Alphabet der ASCII Tabelle\n */\n static final String ALPHABET = \"/*FIXME*/\";\n\n /**\n * Allgemeine Methode die eine Eingabe in einem Alphabet verschiebt\n * \n * Das Alphabet sind alle schreibbaren ASCII-Zeichen.\n * Die Verschiebung soll swohol nach rechts (positiv),\n * als auch nach links (negativ) funktionieren.\n * \n * @param eingabe Der Eingabetext\n * @param verschiebung Die Verschiebung im Alphabet\n * @return Der Text indem jedes Zeichen um verschiebung verschoben wurde\n */\n static String caesar(String eingabe, int verschiebung) {\n String ausgabe = \"\";\n // TODO: Implementiere die Methode gemaess ihrer Beschreibung\n // Tipps gibts unter:\n // https://schule.muhq.space/panther/schwer.html\n return ausgabe;\n }\n\n /**\n * Verschluesselt einen Text mit dem Caesar-Verfahren\n * \n * @param klartext Der zuverschluesselnde Klartext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der verschluesselte Geheimtext\n */\n static String verschluesseln(String klartext, int schluessel) {\n return caesar(klartext, schluessel);\n }\n\n /**\n * Entschluesselt einen Gehimtext mit dem Caesar-Verfahren\n * \n * @param geheimtext Der zuentschluesselnde Geheimtext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der entschluesselte Klartext\n */\n static String entschluesseln(String geheimtext, int schluessel) {\n return caesar(geheimtext, 0 /* FIXME */);\n }\n}","identical_to_repository_version":true,"is_copy_of_id":1618340,"repository_file_version":3}],"settings":{"libraries":[]}} \ No newline at end of file
diff --git a/Info/11/NTG/2/Caesar-Implementierung/SymCryptLsg.json b/Info/11/NTG/2/Caesar-Implementierung/SymCryptLsg.json
new file mode 100644
index 00000000..f6ee2b37
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/SymCryptLsg.json
@@ -0,0 +1 @@
+{"name":"SymCrypt","modules":[{"name":"CaesarLeicht","text":"/**\n * Implementierung des Caesar-Verfahrens\n * \n * Die Klasse bietet statische Methoden zum ver- und entschluesseln\n * von Text mithilfe des Caesar-Verfahrens an.\n */\nclass CaesarLeicht {\n /**\n * Allgemeine Methode die eine Eingabe im Alphabet verschiebt\n * \n * Das Alphabet besteht dabei nur aus Kleinbuchstaben ([a-z]).\n * Die Verschiebung muss dabei nur nach rechts.\n * \n * @param eingabe Der Eingabetext\n * @param verschiebung Die Verschiebung im Alphabet\n * @return Der Text indem jedes Zeichen um verschiebung verschoben wurde\n */\n static String caesar(String eingabe, int verschiebung) {\n String output = \"\";\n for (int i = 0; i < eingabe.length(); i++) {\n char c = eingabe.charAt(i);\n // Nur Kleinbuchstaben werden verschoben.\n if (c >= 97 && c <= 122) {\n // 'a' hat die Position 0 im Alphabet.\n int pos = c - 97;\n // Berechne die neue Position im Alphabet.\n pos = (pos + verschiebung) % 26;\n // Addiere den Wert von 'a',\n // um den Zahlenwert des Zeichens zu erhalten.\n c = (char)(pos + 97);\n }\n output += c;\n }\n \n return output;\n }\n\n /**\n * Verschluesselt einen Text mit dem Caesar-Verfahren\n * \n * @param klartext Der zuverschluesselnde Klartext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der verschluesselte Geheimtext\n */\n static String verschluesseln(String klartext, int schluessel) {\n return caesar(klartext, schluessel);\n }\n\n /**\n * Entschluesselt einen Gehimtext mit dem Caesar-Verfahren\n * \n * @param geheimtext Der zuentschluesselnde Geheimtext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der entschluesselte Klartext\n */\n static String entschluesseln(String geheimtext, int schluessel) {\n return caesar(geheimtext, 26 - schluessel);\n }\n}","identical_to_repository_version":true,"is_copy_of_id":1618303,"repository_file_version":2},{"name":"Story","text":"class Story {\n static long djb2Hash(String s) {\n long hash = 5381;\n for (int i = 0; i < s.length(); i++) {\n hash = ((hash << 5) + hash) + (int)s.charAt(i); \n }\n return hash;\n }\n\n static void run() {\n Story.intro();\n if(Story.aufgabenAuswahl().equalsIgnoreCase(\"schwer\")) {\n Story.aufgabeSchwer();\n } else {\n Story.aufgabeLeicht();\n }\n Story.ende();\n }\n\n static void intro() {\n Panther.sagt(\"\"\"\n\nDu musst mir helfen!\nJemand hat mich gestohlen.\nUm sicher zu sein, dass du mir\nhelfen kannst, beantworte\nfolgende Frage:\nzhofkh idueh kdeh lfk?\n\"\"\");\n\n if(djb2Hash(Input.readString(\"Antwort:\").toLowerCase()) != 2090616631) { System.exit(1); }\n\n }\n \n static String aufgabenAuswahl() {\n Panther.sagt(\"\"\"\nVoellig korrekt!\nIch sehe schon du bist\ngeeignet. Der Dieb hat\nverschluesselte Nachrichten\nhinterlassen. Ich vermute er\nverwendet das Caesar-Verfahren.\nDu musst das Caesar-Verfahren\nimplementieren, um die\nNachrichten zu entschluesseln.\n\"\"\");\n\n return Input.readString(\"Willst du es leicht oder schwer?: \");\n }\n \n static void uhr() {\n println(\"\"\"\n\n\nDie Uhr am Tatort:\n _____\n _.'_____`._\n .'.-' 12 `-.`.\n /,' 11 1 `.\\\\\\\n // 10 / 2 \\\\\\\\\\\\\n;; / ::\n|| 9 ----O 3 ||\n:: ;;\n \\\\\\\\\\\\ 8 4 //\n \\\\\\`. 7 5 ,'/\n '.`-.__6__.-'.'\n ((-._____.-))\n _)) ((_\n '--' '--'\n\"\"\");\n }\n\n static void aufgabeLeicht() {\n Panther.sagt(\"\"\"\n\nDu hast dich fuer 'leicht' entschieden.\nGut ich weiss naemlich, dass\nder Dieb nur die 26 Kleinbuchstaben\nunseres Alphabets verwendet.\n\nErgaenze die Methode caesar in der\nKlasse Caesar, so dass sie mit allen 26\nKleinbuchstaben funktioniert.\n\n\n\"\"\");\n\n println(\"\"\"\n\nWeitere Tipps findest du unter:\nhttps://schule.muhq.space/panther/leicht.html\n\"\"\");\n\n if(djb2Hash(CaesarLeicht.entschluesseln(\"ghu jroghqh uhlwhu\", 3)) != 3019481481) {\n println(\"Deine caesar Implementierung ist leider noch nicht korrekt.\");\n println(\"Der Ort des rosaroten Panther ist immer noch unbekannt.\");\n System.exit(1);\n }\n\n println();\n Panther.sagt(\"\"\"\nSehr gut! Den ersten Hinweis\n'der goldene reiter' konnten\nwir entschluesseln.\n\nDer Dieb hat am Tatort an\nder Uhr gedreht!\nEntschluessle den zweiten Hinweis:\n\n'nbocnox qbklox'\n\"\"\");\n\n uhr();\n \n if(djb2Hash(Input.readString(\"Hinweis:\")) != -2553580551) {\n println(\"Der Hinweis ist nicht korrekt.\");\n println(\"Hast du den passend Schluessel verwendet?\");\n System.exit(1);\n }\n }\n\n static void aufgabeSchwer() {\n Panther.sagt(\"\"\"\nDu hast dich fuer 'schwer' entschieden.\nDas ist auch noetig, denn\nder Dieb verwendet alle schreibbaren\nBuchstaben der ASCII-Tabelle [1].\n\nErgaenze die Methode caesar in der\nKlasse CaesarSchwer, so dass sie mit\nallen schreibbaren ASCII Zeichen und\nin beide Richtungen funktioniert.\n\n[1]: https://bycs.link/Roqmvh\n\"\"\");\n\n println(\"\"\"\n\nWeitere Tipps findest du unter:\nhttps://schule.muhq.space/panther/schwer.html\n\nDer Dieb hat wohl seinen Passwort-\nZettel am Tatort verloren.\n ______________________________\n / \\\\\\ \\\\\\.\n| | |.\n \\\\\\_ | Passwort: |.\n | M[]nA.-5]a+ |.\n | |.\n | Hinweis: |.\n | Antwort auf die endgültige |.\n | Frage nach dem Leben, |.\n | dem Universum und |.\n | dem ganzen Rest |.\n | |.\n | _________________________|___\n | / /.\n \\\\\\_/____________________________/.\n\"\"\");\n\n if(djb2Hash(CaesarSchwer.entschluesseln(\"M[]nA.-5]a+\",\n Input.readInt(\"Antwort auf die endgültige Frage nach dem Leben, dem Universum und dem ganzen Rest:\"))) != -42961670) {\n println(\"Deine caesar Implementierung ist leider noch nicht korrekt\");\n println(\"oder der Schluessel ist noch falsch.\");\n println(\"Das Passwort des Diebes ist weiterhin geheim.\");\n System.exit(1);\n }\n \n println();\n Panther.sagt(\"\"\"\nSehr gut wir haben das Passwort:\n#13Dubai37_\n\nDamit habe ich die Beschreibung\ndes Verstecks gefunden:\n\nWx' W|t\"t#) ()xv~) |# x|#x\"\nfv{!|x((ytv{ t\" Zt'x w* a$'wA\nWx# fv{!*x((x! {tux |v{ \"|) wx\"\nY!*z XmlEGFI +$# VWZ #tv{ _ga zx(v{|v~)A\n\n\nAusserdem ist mir aufgefallen,\ndass der Dieb am Tatort\nan der Uhr gedreht hat.\n\"\"\");\n\n uhr();\n\n String antwort = Input.readString(\"Wohin muessen wir Interpol schicken?\");\n if(djb2Hash(antwort.toLowerCase()) != 199414383) {\n println(\"Interpol findet leider nichts in \" + antwort);\n System.exit(1);\n }\n }\n \n static void ende() {\n String feuerwerk = \"\"\"\n .''.\n .''. . *''* :_\\\\\\/_: .\n :_\\\\\\/_: _\\\\\\(/_ .:.*_\\\\\\/_* : /\\\\\\ : .'.:.'.\n .''.: /\\\\\\ : ./)\\\\\\ ':'* /\\\\\\ * : '..'. -=:o:=-\n :_\\\\\\/_:'.:::. ' *''* * '.\\\\\\'/.' _\\\\\\(/_'.':'.'\n : /\\\\\\ : ::::: *_\\\\\\/_* -= o =- /)\\\\\\ ' *\n '..' ':::' * /\\\\\\ * .'/.\\\\\\'. '\n * *..* :\n *\n *\n \"\"\";\n println(\"\");\n println(\"Geschafft!\");\n println(\"Die Polizei hat dank deiner Hilfe\");\n println(\"den rosaroten Panther gefunden!\");\n println(\"Ganz Frankreich dankt Dir.\");\n println(feuerwerk);\n \n }\n}\n\n \nclass Panther {\n static final String[] gesicht = \"\"\"\n .--. .--. \n ( (`\\\\\\\\\\\\.\"--``--\".//`) ) \n '-. __ __ .-' \n / /__\\\\\\ /__\\\\\\ \\\\\\ \n | \\\\\\ 0/ \\\\\\ 0/ | \n \\\\\\ `/ \\\\\\` / \n `-. /-\\\"\\\"\\\"-\\\\\\ .-` \n / '.___.' \\\\\\ \n \\\\\\ I / \n `;--'`'--;` \n '.___.' \n\"\"\".split(\"\\\\r?\\\\n\");\n \n static void sagt(String nachricht) {\n String[] zeilen = nachricht.split(\"\\\\r?\\\\n\");\n for (int i = 0; i < Math.max(gesicht.length, zeilen.length); i++) {\n String zeile = \"\";\n if(i < gesicht.length) {\n zeile = gesicht[i];\n } else {\n zeile = \"\";\n }\n \n if(i < zeilen.length) {\n zeile += zeilen[i]; \n }\n println(zeile);\n }\n }\n}\n\nStory.run();","identical_to_repository_version":false,"is_copy_of_id":1618304,"repository_file_version":1},{"name":"CaesarSchwer","text":"/**\n * Implementierung des Caesar-Verfahrens\n * \n * Die Klasse bietet statische Methoden zum ver- und entschluesseln\n * von Text mithilfe des Caesar-Verfahrens an.\n */\nclass CaesarSchwer {\n /**\n * Das gesamte schreibbare Alphabet der ASCII Tabelle\n */\n static final String ALPHABET = \"!\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\";\n\n /**\n * Allgemeine Methode die eine Eingabe in einem Alphabet verschiebt\n * \n * Das Alphabet sind alle schreibbaren ASCII-Zeichen.\n * Die Verschiebung soll swohol nach rechts (positiv),\n * als auch nach links (negativ) funktionieren.\n * \n * @param eingabe Der Eingabetext\n * @param verschiebung Die Verschiebung im Alphabet\n * @return Der Text indem jedes Zeichen um verschiebung verschoben wurde\n */\n static String caesar(String eingabe, int verschiebung) {\n String ausgabe = \"\";\n for (int i = 0; i < eingabe.length(); i++) {\n int pos = eingabe.charAt(i) - 33;\n // Uebernehme nicht schreibbare Zeichen direkt\n if(pos < 0) {\n ausgabe += eingabe.charAt(i);\n continue;\n }\n\n // Berechne die neue Position im Alphabet\n int newPos = (pos + verschiebung);\n // Positiver Ueberlauf\n if(newPos >= ALPHABET.length()) {\n newPos = newPos - ALPHABET.length();\n } // Negativer Ueberlauf\n else if(newPos < 0) {\n newPos = newPos + ALPHABET.length();\n }\n\n ausgabe += ALPHABET.charAt(newPos);\n }\n \n return ausgabe;\n }\n\n /**\n * Verschluesselt einen Text mit dem Caesar-Verfahren\n * \n * @param klartext Der zuverschluesselnde Klartext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der verschluesselte Geheimtext\n */\n static String verschluesseln(String klartext, int schluessel) {\n return caesar(klartext, schluessel);\n }\n\n /**\n * Entschluesselt einen Gehimtext mit dem Caesar-Verfahren\n * \n * @param geheimtext Der zuentschluesselnde Geheimtext\n * @param schluessel Der zuverwendende geheime Schluessel\n * @return Der entschluesselte Klartext\n */\n static String entschluesseln(String geheimtext, int schluessel) {\n return caesar(geheimtext, -schluessel);\n }\n}","identical_to_repository_version":true,"is_copy_of_id":1618340,"repository_file_version":2}],"settings":{"libraries":[]}} \ No newline at end of file
diff --git a/Info/11/NTG/2/Caesar-Implementierung/leicht.md b/Info/11/NTG/2/Caesar-Implementierung/leicht.md
new file mode 100644
index 00000000..3c037ccb
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/leicht.md
@@ -0,0 +1,85 @@
+---
+ author: Florian Fischer
+ lang: de
+ title: Caesar Implementierung leicht
+---
+
+<details>
+<summary>
+**Wie bekomme ich jedes Zeichen in einem Text?**
+</summary>
+
+Java bietet die Methode [`char String.charAt(int pos)`{.java}](), um auf ein einzelnes Zeichen (`char`{.java}) in einem String an der 0-indizierten Stelle `pos`{.java} zuzugreifen.
+
+Mit einer `for`{.java} Schleife und der Länge des Strings ([`String.length()`{.java}]()) hast du alles was du brauchst.
+</details>
+
+<details>
+<summary>
+**Wie erkenne ich Kleinbuchstaben?**
+</summary>
+
+* Der erste Kleinbuchstabe `a` hat den Zahlenwert `97`.
+* Der letzte Kleinbuchstabe `z` hat demnach den Zahlenwert `122`.
+</details>
+
+<details>
+<summary>
+**Wie schaffe ich es, dass ich den Zeichenbereich `a-z` nicht verlasse?**
+</summary>
+
+* Mit dem [Modulo-Operator `%`](https://de.wikipedia.org/wiki/Modulo)
+* oder mit geeigneten `if`{.java} Bedingungen kannst du dafür sorgen, dass dein neues Zeichen immer noch im Zeichenbereich `a-z` liegt. <!-- Find easier modulo explanation -->
+</details>
+
+<details>
+<summary>
+**Wie kann ich einen neuen `String`{.java} zusammenbauen?**
+</summary>
+
+Du kannst einzelne Zeichen zu einem `String`{.java} einfach mit dem Plus-Operator `+` hinzufügen.
+</details>
+
+<details>
+<summary>
+**Wie kann ich `int`{.java} in `char`{.java} umwandeln?**
+</summary>
+
+In Java können Daten vom Typ `int`{.java} mit einem [Type-Cast]() zum Typ `char`{.java} umgewandelt werden.
+Auch das Ergebnis einer Rechnungen kann umgewandelt werden.
+
+* `char c = (char)27; // Umwandlung einer Zahl`{.java}
+* `char c = (char)("a".charAt(0) + 27); // Umwandlung eines Ergebnisses`{.java}
+</details>
+
+<details>
+<summary>
+**Lösung**
+</summary>
+Sicher dass du die Lösung sehen willst?
+<details>
+<summary>
+**Ja!**
+</summary>
+```java
+static String caesar(String eingabe, int verschiebung) {
+ String ausgabe = "";
+ for (int i = 0; i < eingabe.length(); i++) {
+ char c = eingabe.charAt(i);
+ // Nur Kleinbuchstaben werden verschoben.
+ if (c >= 97 && c <= 122) {
+ // 'a' hat die Position 0 im Alphabet.
+ int pos = c - 97;
+ // Berechne die neue Position im Alphabet.
+ pos = (pos + verschiebung) % 26;
+ // Addiere den Wert von 'a',
+ // um den Zahlenwert des Zeichens zu erhalten.
+ c = pos + 97;
+ }
+ output += c;
+ }
+ return ausgabe;
+}
+```
+</details>
+</details>
diff --git a/Info/11/NTG/2/Caesar-Implementierung/pandoc-template.html b/Info/11/NTG/2/Caesar-Implementierung/pandoc-template.html
new file mode 100644
index 00000000..8c6ce47e
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/pandoc-template.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="$lang$" xml:lang="$lang$"$if(dir)$ dir="$dir$"$endif$>
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+$for(author-meta)$
+ <meta name="author" content="$author-meta$" />
+$endfor$
+$if(keywords)$
+ <meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" />
+$endif$
+$if(description-meta)$
+ <meta name="description" content="$description-meta$" />
+$endif$
+ <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
+ <style>
+ $styles.html()$
+
+ .wrapper {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ }
+
+ .content {
+ flex: 1;
+ overflow: auto;
+ }
+ </style>
+</head>
+<body>
+<div class="wrapper">
+<div class="content">
+$if(title)$
+<header id="title-block-header">
+<h1 class="title">$title$</h1>
+$if(subtitle)$
+<p class="subtitle">$subtitle$</p>
+$endif$
+</header>
+$endif$
+$body$
+</div>
+<footer>
+<p xmlns:cc="http://creativecommons.org/ns#">Diese Seite von <span property="cc:attributionName">$author$</span> ist unter folgender Lizenz veröffentlicht: <a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-SA 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1" alt=""></a></p>
+</footer>
+</div>
+</body>
+</html>
diff --git a/Info/11/NTG/2/Caesar-Implementierung/schwer.md b/Info/11/NTG/2/Caesar-Implementierung/schwer.md
new file mode 100644
index 00000000..e7c79b6a
--- /dev/null
+++ b/Info/11/NTG/2/Caesar-Implementierung/schwer.md
@@ -0,0 +1,115 @@
+---
+ author: Florian Fischer
+ lang: de
+ title: Cesar Implementierung schwer
+---
+
+<details>
+<summary>
+**Wie bekomme ich jedes Zeichen in einem Text?**
+</summary>
+
+Java bietet die Methode [`char String.charAt(int pos)`{.java}](), um auf ein einzelnes Zeichen (`char`{.java}) in einem String an der 0-indizierten Stelle `pos`{.java} zuzugreifen.
+
+Mit einer `for`{.java} Schleife und der Länge des Strings ([`String.length()`{.java}]()) hast du alles was du brauchst.
+</details>
+
+<details>
+<summary>
+**Wie erkenne ich schreibbare ASCII Zeichen?**
+</summary>
+
+* Alle nichtschreibbaren ASCII Zeichen kommen vor dem Leerzeichen.
+* Siehe: ASCII-Tabelle ([Wikipedia](https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange#ASCII-Tabelle))
+</details>
+
+<details>
+<summary>
+**Wie schaffe ich es, den Zeichenbereich nicht zu verlasse?**
+</summary>
+
+* Mit dem [Modulo-Operator `%`](https://de.wikipedia.org/wiki/Modulo)
+* oder mit geeigneten `if`{.java} Bedingungen kannst du dafür sorgen, dass dein neues Zeichen immer noch im Zeichenbereich liegt. <!-- Find easier modulo explanation -->
+</details>
+
+<details>
+<summary>
+**Wie kann ich einen neuen `String`{.java} zusammenbauen?**
+</summary>
+
+Du kannst einzelne Zeichen zu einem `String`{.java} einfach mit dem Plus-Operator `+` hinzufügen.
+</details>
+
+<details>
+<summary>
+**Wie kann ich `int`{.java} in `char`{.java} umwandeln?**
+</summary>
+
+In Java können Daten vom Typ `int`{.java} mit einem [Type-Cast]() zum Typ `char`{.java} umgewandelt werden.
+Auch das Ergebnis einer Rechnungen kann umgewandelt werden.
+
+* `char c = (char)27; // Umwandlung einer Zahl`{.java}
+* `char c = (char)("a".charAt(0) + 27); // Umwandlung eines Ergebnisses`{.java}
+</details>
+
+<details>
+<summary>
+**Lösung**
+</summary>
+Sicher dass du die Lösung sehen willst?
+<details>
+<summary>
+**Ja!**
+</summary>
+<details>
+<summary>
+`String caesar(String eingabe, int verschiebung)`{.java}
+</summary>
+```java
+/**
+ * Das gesamte schreibbare Alphabet der ASCII Tabelle
+ */
+static final String ALPHABET = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+
+static String caesar(String eingabe, int verschiebung) {
+ String ausgabe = "";
+ for (int i = 0; i < eingabe.length(); i++) {
+ // Das erste schreibbare Zeichen hat den Zahlenwert 33
+ int pos = eingabe.charAt(i) - 33;
+ // Uebernehme nicht schreibbare Zeichen direkt
+ if(pos < 0) {
+ ausgabe += eingabe.charAt(i);
+ continue;
+ }
+
+ // Berechne die neue Position im Alphabet
+ int newPos = (pos + verschiebung);
+ // Positiver Ueberlauf
+ if(newPos >= ALPHABET.length()) {
+ newPos = newPos - ALPHABET.length();
+ } // Negativer Ueberlauf
+ else if(newPos < 0) {
+ newPos = newPos + ALPHABET.length();
+ }
+
+ ausgabe += ALPHABET.charAt(newPos);
+ }
+ return ausgabe;
+}
+```
+</details>
+
+<details>
+<summary>
+`String entschluesseln(String geheimtext, int schluessel)`{.java}
+</summary>
+```java
+static String entschluesseln(String geheimtext, int schluessel) {
+ // Um die selbe Anzahl an Stellen in die entgegengesetze Richtung
+ // verschieben, erzeugt wieder den Klartext.
+ return caesar(geheimtext, -schluessel);
+}
+```
+</details>
+</details>
+</details>