From 9cda38d35ec763df1493b22395a6669ffe63eb1d Mon Sep 17 00:00:00 2001 From: tebarius Date: Fri, 8 Aug 2025 23:48:32 +0200 Subject: [PATCH] rewrite brainfuck ook and add encoding for them --- app/app.py | 20 ++++++--- app/tools.py | 114 +++++++++++++++-------------------------------- requirements.txt | Bin 74 -> 112 bytes 3 files changed, 51 insertions(+), 83 deletions(-) diff --git a/app/app.py b/app/app.py index bb81765..21a77f8 100644 --- a/app/app.py +++ b/app/app.py @@ -272,11 +272,17 @@ def auswahl_verarbeiten(): elif "ADFGVX dekodieren" in auswahl: st.session_state.output_text = tools.adfgvx_dekodieren(text, additional_parameter) st.session_state.map_data = None - elif "Brainfuck-Interpreter" in auswahl: - st.session_state.output_text = tools.brainfuck_interpreter(text) + elif "Brainfuck -> Text" in auswahl: + st.session_state.output_text = tools.brainfuck_to_text(text) st.session_state.map_data = None - elif "Ook-Interpreter" in auswahl: - st.session_state.output_text = tools.ook_interpreter(text) + elif "Text -> Brainfuck" in auswahl: + st.session_state.output_text = tools.text_to_brainfuck(text) + st.session_state.map_data = None + elif "Ook -> Text" in auswahl: + st.session_state.output_text = tools.ook_to_text(text) + st.session_state.map_data = None + elif "Text -> Ook" in auswahl: + st.session_state.output_text = tools.text_to_ook(text) st.session_state.map_data = None # Standardwerte im Session State initialisieren @@ -375,8 +381,10 @@ option = st.sidebar.radio("hidden_label", ":green[ADFGX dekodieren]", ":green[ADFGVX kodieren]", ":green[ADFGVX dekodieren]", - ":green-badge[Brainfuck-Interpreter]", - ":green-badge[Ook-Interpreter]", + ":green-badge[Brainfuck -> Text]", + ":green-badge[Text -> Brainfuck]", + ":green-badge[Ook -> Text]", + ":green-badge[Text -> Ook]", ), key='option', on_change=auswahl_verarbeiten, diff --git a/app/tools.py b/app/tools.py index b42b268..fffc2a0 100644 --- a/app/tools.py +++ b/app/tools.py @@ -6,6 +6,7 @@ import hilfetexte import pandas as pd from urllib.parse import unquote as urllib_parse_unquote # für nak-nak import binascii # für base64_ascii +import brainfuckery def cesar_all(eingabetext): eingabetext = eingabetext.rstrip() @@ -2614,91 +2615,50 @@ def adfgvx_dekodieren(eingabetext, pw): ausgabetext += f":blue[dekodiert mit Variante 9-0,Z-A:] \n{klartext_90za}" return ausgabetext -def brainfuck_interpreter(eingabetext): +def brainfuck_to_text(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": return hilfetexte.brainfuck_interpreter else: - # ein kleiner feiner Code von https://gist.github.com/kates/986792 - c = [0] * 300000 - p = 0 - loop = [] - rv = [] - ts = list(eingabetext) - li = len(ts) - i = 0 - while i < li: - t = ts[i] - if t == ">": - p += 1 - elif t == "<": - p -= 1 - elif t == "+": - c[p] += 1 - elif t == "-": - c[p] -= 1 - elif t == ".": - rv.append(chr(c[p])) - elif t == ",": - pass - elif t == "[": - if c[p] == 0: - while ts[i] != "]": - i += 1 - loop.pop() - else: - loop.append(i - 1) - elif t == "]": - i = loop[-1] - i += 1 - return "".join(rv) + return brainfuckery.Brainfuckery().interpret(eingabetext) +def text_to_brainfuck(eingabetext): + eingabetext = eingabetext.rstrip() + if eingabetext == "": + return hilfetexte.brainfuck_interpreter + else: + return brainfuckery.Brainfuckery().convert(eingabetext) -def ook_interpreter(eingabetext): +def ook_to_text(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": return hilfetexte.ook_interpreter else: - ookzeichen = [".", "!", "?"] - ooktext = "" + ook_zeichen = [".", "!", "?"] + ook_text = "" for z in eingabetext: # erstmal Short-Ook draus machen - if z in ookzeichen: - ooktext = ooktext + z - ookbf = {"..": "+", "!!": "-", ".?": ">", "?.": "<", "!?": "[", "?!": "]", "!.": ".", ".!": ","} - bftext = "" - for o in range(0, len(ooktext), 2): # jetzt in Brainfuck umwandeln - ooz = ooktext[o:o + 2] - if ooz in ookbf: - bftext = bftext + ookbf[ooz] - c = [0] * 300000 - p = 0 - loop = [] - rv = [] - ts = list(bftext) - li = len(ts) - i = 0 - while i < li: - t = ts[i] - if t == ">": - p += 1 - elif t == "<": - p -= 1 - elif t == "+": - c[p] += 1 - elif t == "-": - c[p] -= 1 - elif t == ".": - rv.append(chr(c[p])) - elif t == ",": - pass - elif t == "[": - if c[p] == 0: - while ts[i] != "]": - i += 1 - loop.pop() - else: - loop.append(i - 1) - elif t == "]": - i = loop[-1] - i += 1 - return "".join(rv) + if z in ook_zeichen: + ook_text = ook_text + z + ook_bf_dict = {"..": "+", "!!": "-", ".?": ">", "?.": "<", "!?": "[", "?!": "]", "!.": ".", ".!": ","} + bf_text = "" + for o in range(0, len(ook_text), 2): # jetzt in Brainfuck umwandeln + ooz = ook_text[o:o + 2] + if ooz in ook_bf_dict: + bf_text = bf_text + ook_bf_dict[ooz] + return brainfuckery.Brainfuckery().interpret(bf_text) + +def text_to_ook(eingabetext): + eingabetext = eingabetext.rstrip() + if eingabetext == "": + return hilfetexte.ook_interpreter + else: + bf_text = brainfuckery.Brainfuckery().convert(eingabetext) + ook_bf_dict = {"..": "+", "!!": "-", ".?": ">", "?.": "<", "!?": "[", "?!": "]", "!.": ".", ".!": ","} + bf_ook_dict = {v: k for k, v in ook_bf_dict.items()} + short_ook = "" + for b in bf_text: + short_ook += bf_ook_dict[b] + ook_txt = "" + for z in short_ook: + ook_txt += f"Ook{z} " + return f":blue[Short-Ook:] \n{short_ook} \n \n:blue[Ook:] \n{ook_txt}" diff --git a/requirements.txt b/requirements.txt index 3f4e58d46384e48c20b7bf4e90c8802b52633d78..aac73aba1ec9ce58502701674acf98bcf18a31ba 100644 GIT binary patch delta 47 ycmeY&nBb