From 8987e95775f3c6292dd0dcb8412cbde05efa4703 Mon Sep 17 00:00:00 2001 From: tebarius Date: Tue, 19 Aug 2025 23:55:07 +0200 Subject: [PATCH] adding RLOU/RLUD -> Graph --- app/app.py | 95 ++++++++++------------------------------------ app/hilfetexte.py | 8 ++++ app/tools.py | 27 +++++++++++++ requirements.txt | Bin 112 -> 152 bytes 4 files changed, 54 insertions(+), 76 deletions(-) diff --git a/app/app.py b/app/app.py index 21a77f8..972d0ce 100644 --- a/app/app.py +++ b/app/app.py @@ -3,6 +3,7 @@ import streamlit as st import base64 import tools +import matplotlib.pyplot as plt standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bitte die Funktion mit leerem' ' Eingabefeld aufrufen.') @@ -44,192 +45,132 @@ with title_col: def auswahl_verarbeiten(): text = st.session_state.input_text auswahl = st.session_state.option + st.session_state.map_data = None + st.session_state.graph_data = None if auswahl == "Wähle eine Funktion": st.session_state.output_text = standard_output - st.session_state.map_data = None elif "Cesarchiffre (all)" in auswahl: st.session_state.output_text = tools.cesar_all(text) - st.session_state.map_data = None elif "BW,BWW,... ermitteln" in auswahl: st.session_state.output_text = tools.buchstabenwortwert(text) - st.session_state.map_data = None elif "Buchstabenwert -> Text" in auswahl: st.session_state.output_text = tools.buchstabenwert_zu_text(text) - st.session_state.map_data = None elif "Zeichenzählen" in auswahl: st.session_state.output_text = tools.zeichenanzahl(text) - st.session_state.map_data = None elif "Text rückwärts" in auswahl: st.session_state.output_text = tools.zeichenkette_reverse(text) - st.session_state.map_data = None elif "Quersumme(n)" in auswahl: st.session_state.output_text = tools.quersummen(text) - st.session_state.map_data = None elif "Einschlüsse zählen" in auswahl: st.session_state.output_text = tools.einschluss_count(text) - st.session_state.map_data = None elif "ABC -> Morse" in auswahl: st.session_state.output_text = tools.abc_to_morse(text) - st.session_state.map_data = None elif "Morse -> ABC" in auswahl: st.session_state.output_text = tools.morse_to_abc(text) - st.session_state.map_data = None elif "ROT5" in auswahl: st.session_state.output_text = tools.rot5(text) - st.session_state.map_data = None elif "ROT13" in auswahl: st.session_state.output_text = tools.rot13(text) - st.session_state.map_data = None elif "ROT18" in auswahl: st.session_state.output_text = tools.rot18(text) - st.session_state.map_data = None elif "ROT47" in auswahl: st.session_state.output_text = tools.rot47(text) - st.session_state.map_data = None elif "ASCII-Text -> HEX" in auswahl: st.session_state.output_text = tools.ascii_to_hex(text) - st.session_state.map_data = None elif "ASCII-Text -> DEZ" in auswahl: st.session_state.output_text = tools.ascii_to_dez(text) - st.session_state.map_data = None elif "ASCII-Text -> Octal" in auswahl: st.session_state.output_text = tools.ascii_to_octal(text) - st.session_state.map_data = None elif "ASCII-Text -> BIN (16bit)" in auswahl: st.session_state.output_text = tools.ascii_to_bin16(text) - st.session_state.map_data = None elif "ASCII-Text -> BIN (8bit)" in auswahl: st.session_state.output_text = tools.ascii_to_bin8(text) - st.session_state.map_data = None elif "HEX -> ASCII-Text" in auswahl: st.session_state.output_text = tools.hex_to_ascii(text) - st.session_state.map_data = None elif "DEZ -> ASCII-Text" in auswahl: st.session_state.output_text = tools.dez_to_ascii(text) - st.session_state.map_data = None elif "Octal -> ASCII-Text" in auswahl: st.session_state.output_text = tools.octal_to_ascii(text) - st.session_state.map_data = None elif "BIN -> ASCII-Text" in auswahl: st.session_state.output_text = tools.bin_to_ascii(text) - st.session_state.map_data = None elif "Zahlwortsuche-DE (0-12)" in auswahl: st.session_state.output_text = tools.zahlwortsuche_de(text) - st.session_state.map_data = None elif "Zahlwortsuche-EN (0-15)" in auswahl: st.session_state.output_text = tools.zahlwortsuche_en(text) - st.session_state.map_data = None elif "KENNYspeak kodieren" in auswahl: st.session_state.output_text = tools.kenny_kodieren(text) - st.session_state.map_data = None elif "KENNYspeak dekodieren" in auswahl: st.session_state.output_text = tools.kenny_dekodieren(text) - st.session_state.map_data = None elif "KENNYspeak raten" in auswahl: st.session_state.output_text = tools.kenny_raten(text) - st.session_state.map_data = None elif "Primz.Alpha dekodieren" in auswahl: st.session_state.output_text = tools.primzahlalphabet_dekodieren(text) - st.session_state.map_data = None elif "ist (n.te) Primzahl?" in auswahl: st.session_state.output_text = tools.primzahlpruefen(text) - st.session_state.map_data = None elif "zeige n.te Primzahl" in auswahl: st.session_state.output_text = tools.nte_primzahl(text) - st.session_state.map_data = None elif "Primfaktorenzerlegung" in auswahl: st.session_state.output_text = tools.primfaktoren(text) - st.session_state.map_data = None elif "HEX -> DEZ,OCT,BIN" in auswahl: st.session_state.output_text = tools.hex_to_dez_oct_bin(text) - st.session_state.map_data = None elif "DEZ -> HEX,OCT,BIN" in auswahl: st.session_state.output_text = tools.dez_to_hex_oct_bin(text) - st.session_state.map_data = None elif "OCT -> HEX,DEZ,BIN" in auswahl: st.session_state.output_text = tools.oct_to_hex_dez_bin(text) - st.session_state.map_data = None elif "BIN -> HEX,DEZ,OCT" in auswahl: st.session_state.output_text = tools.bin_to_hex_dez_oct(text) - st.session_state.map_data = None elif "Text -> Tomtom" in auswahl: st.session_state.output_text = tools.abc_to_tomtom(text) - st.session_state.map_data = None elif "Tomtom -> Text" in auswahl: st.session_state.output_text = tools.tomtom_to_abc(text) - st.session_state.map_data = None elif "Text -> Slash and Pipe" in auswahl: st.session_state.output_text = tools.text_to_slashpipe(text) - st.session_state.map_data = None elif "Slash and Pipe -> Text" in auswahl: st.session_state.output_text = tools.slashpipe_to_text(text) - st.session_state.map_data = None elif "PSE: O.zahl <-> Symbol" in auswahl: st.session_state.output_text = tools.periodensystem(text) - st.session_state.map_data = None elif "Nak-Nak -> Text" in auswahl: st.session_state.output_text = tools.naknak_to_text(text) - st.session_state.map_data = None elif "Navajo -> Text" in auswahl: st.session_state.output_text = tools.navajo_to_text(text) - st.session_state.map_data = None elif "Kreiszahl PI" in auswahl: st.session_state.output_text = tools.pi_suche(text) - st.session_state.map_data = None elif "Eulersche Zahl" in auswahl: st.session_state.output_text = tools.euler_suche(text) - st.session_state.map_data = None elif "phi (goldener Schnitt)" in auswahl: st.session_state.output_text = tools.goldener_schnitt_suche(text) - st.session_state.map_data = None elif "Anagrammsuche-DE" in auswahl: st.session_state.output_text = tools.anagramm_suche_de(text) - st.session_state.map_data = None elif "Anagrammsuche-EN" in auswahl: st.session_state.output_text = tools.anagramm_suche_en(text) - st.session_state.map_data = None elif "Wortsuche-DE" in auswahl: st.session_state.output_text = tools.wortsuche_de(text) - st.session_state.map_data = None elif "Wortsuche-EN" in auswahl: st.session_state.output_text = tools.wortsuche_en(text) - st.session_state.map_data = None elif "Re-Morse-DE" in auswahl: st.session_state.output_text = tools.remorse_de(text) - st.session_state.map_data = None elif "Re-Morse-EN" in auswahl: st.session_state.output_text = tools.remorse_en(text) - st.session_state.map_data = None elif "T9-DE dekodieren" in auswahl: st.session_state.output_text = tools.t9_de(text) - st.session_state.map_data = None elif "T9-EN dekodieren" in auswahl: st.session_state.output_text = tools.t9_en(text) - st.session_state.map_data = None elif "Vigenere-Chiffre" in auswahl: st.session_state.output_text = tools.vigenere(text, additional_parameter) - st.session_state.map_data = None elif "Wolseley-Chiffre" in auswahl: st.session_state.output_text = tools.wolseley(text, additional_parameter) - st.session_state.map_data = None elif "Mono.-Substitution" in auswahl: st.session_state.output_text = tools.monoalphasubstitution(text, additional_parameter) - st.session_state.map_data = None elif "Autokey-Chiffre" in auswahl: st.session_state.output_text = tools.autokey(text, additional_parameter) - st.session_state.map_data = None elif "Polybios kodieren" in auswahl: st.session_state.output_text = tools.polybios_encode(text, additional_parameter) - st.session_state.map_data = None elif "Polybios dekodieren" in auswahl: st.session_state.output_text = tools.polybios_decode(text, additional_parameter) - st.session_state.map_data = None elif "Klopfcode kodieren" in auswahl: st.session_state.output_text = tools.klopfcode_encode(text) - st.session_state.map_data = None elif "Klopfcode dekodieren" in auswahl: st.session_state.output_text = tools.klopfcode_decode(text) - st.session_state.map_data = None elif "Maptiles/Kachelkoord." in auswahl: output, mapd = tools.maptiles_kachelkoordinaten(text) st.session_state.output_text = output @@ -240,50 +181,40 @@ def auswahl_verarbeiten(): st.session_state.map_data = mapd elif "Chronogramm" in auswahl: st.session_state.output_text = tools.chronogramm(text) - st.session_state.map_data = None elif "Zahl röm. <-> arabisch" in auswahl: st.session_state.output_text = tools.zahlen_roemisch_arabisch_umwandeln(text) - st.session_state.map_data = None elif "URL decode" in auswahl: st.session_state.output_text = tools.url_decode(text) - st.session_state.map_data = None elif "Reverse-Wherigo" in auswahl: output, mapd = tools.reversewig(text) st.session_state.output_text = output st.session_state.map_data = mapd elif "Base64 <-> ASCII" in auswahl: st.session_state.output_text = tools.base64_ascii(text) - st.session_state.map_data = None elif "Jägerzaun kodieren" in auswahl: st.session_state.output_text = tools.jaegerzaun_encrypt(text, additional_parameter) - st.session_state.map_data = None elif "Jägerzaun dekodieren" in auswahl: st.session_state.output_text = tools.jaegerzaun_decrypt(text, additional_parameter) - st.session_state.map_data = None elif "ADFGX kodieren" in auswahl: st.session_state.output_text = tools.adfgx_kodieren(text, additional_parameter) - st.session_state.map_data = None elif "ADFGX dekodieren" in auswahl: st.session_state.output_text = tools.adfgx_dekodieren(text, additional_parameter) - st.session_state.map_data = None elif "ADFGVX kodieren" in auswahl: st.session_state.output_text = tools.adfgvx_kodieren(text, additional_parameter) - st.session_state.map_data = None elif "ADFGVX dekodieren" in auswahl: st.session_state.output_text = tools.adfgvx_dekodieren(text, additional_parameter) - st.session_state.map_data = None elif "Brainfuck -> Text" in auswahl: st.session_state.output_text = tools.brainfuck_to_text(text) - st.session_state.map_data = None 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 + elif "RLOU/RLUD -> Graph" in auswahl: + output, graph_data = tools.rlou_to_graph(text) + st.session_state.output_text = output + st.session_state.graph_data = graph_data # Standardwerte im Session State initialisieren if 'option' not in st.session_state: @@ -294,6 +225,8 @@ if 'output_text' not in st.session_state: st.session_state.output_text = standard_output if 'map_data' not in st.session_state: st.session_state.map_data = None +if 'graph_data' not in st.session_state: + st.session_state.graph_data = None # Eingabefeld im Hauptbereich input_text = st.text_area('Gib deinen Text hier ein und wähle eine Funktion im Menü auf der linken Seite:', @@ -385,6 +318,7 @@ option = st.sidebar.radio("hidden_label", ":green-badge[Text -> Brainfuck]", ":green-badge[Ook -> Text]", ":green-badge[Text -> Ook]", + ":red[RLOU/RLUD -> Graph]" ), key='option', on_change=auswahl_verarbeiten, @@ -427,3 +361,12 @@ st.markdown(st.session_state.output_text) if st.session_state.map_data is not None: st.subheader("Kartenansicht") st.map(st.session_state.map_data) + +if st.session_state.graph_data is not None: + fig, ax = plt.subplots() + for segment in st.session_state.graph_data: + x, y = zip(*segment) + ax.plot(x, y, marker='') + ax.set_aspect('equal', adjustable='box') + ax.axis('off') + st.pyplot(fig) diff --git a/app/hilfetexte.py b/app/hilfetexte.py index fffc6f2..d8cc492 100644 --- a/app/hilfetexte.py +++ b/app/hilfetexte.py @@ -606,3 +606,11 @@ ook_interpreter = ("### Ook-Interpreter\n" "Wort Ook vor die Satzzeichen geschrieben. z.B.: Ook! Ook? Ook. Ook! Da Ook auch durch andere " "Wörter ersetzt oder auch ganz ohne Wörter (ShortOok) auftaucht ignoriert diese Funktion alle " "anderen Zeichen außer .!? bevor versucht wird den Code auszuführen.") + +rlou_to_graph = ("### RLOU/RLUD -> Graph\n" + "Im Grunde genommen ist das hier eigentlich keine Kodierung sondern stellt einfach ein Malanleitung " + "dar. Wobei in der deutschen Version halt R=rechts, L=links, O=oben und U= unten bzw. in der " + "englischen Variante halt L=left, R=right, U=up, D=down ist. \n" + "Die Funktion hier versucht das ganz halt zu malen und als Grafik auszugeben, wobei versucht wird " + "automatisch zu erkennen ob die deutsche oder englische Variante zum Einsatz kommt. \n" + "Zum ausprobieren könnt ihr ja mal `ddurduu ddurduulr ddr rluu ddruul` probieren.") \ No newline at end of file diff --git a/app/tools.py b/app/tools.py index dcfceb2..aeb31e1 100644 --- a/app/tools.py +++ b/app/tools.py @@ -2662,3 +2662,30 @@ def text_to_ook(eingabetext): 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}" + +def rlou_to_graph(eingabetext): + eingabetext = eingabetext.rstrip() + if eingabetext == "": + return hilfetexte.rlou_to_graph, None + else: + if "O" in eingabetext.upper(): + moves = {'R': (1, 0), 'L': (-1, 0), 'O': (0, 1), 'U': (0, -1)} + elif "D" in eingabetext.upper(): + moves = {'R': (1, 0), 'L': (-1, 0), 'U': (0, 1), 'D': (0, -1)} + else: + return (":red[Es wurde weder ein O oder ein D gefunden um festzustellen ob RLOU oder RLUD verwendet werden" + "soll]"), None + directions_list = eingabetext.split() + x, y = 0, 0 + path = [] + for directions in directions_list: + part = [(x,y)] + for d in directions.upper(): + if d in moves: + dx, dy = moves[d] + x += dx + y += dy + part.append((x, y)) + path.append(part) + x += 3 + return f":blue[Graph:]", path diff --git a/requirements.txt b/requirements.txt index aac73aba1ec9ce58502701674acf98bcf18a31ba..b0b0e002e2bca910fefaf2b04700a6a78910f20d 100644 GIT binary patch delta 46 ycmXSz!8oBnBbOnOp@gA;A%`I!NarwQG9)q7G1xK~Gw3lGG8h0!QwClJE(QSpE(l=& delta 5 McmbQiSTLag00rR!3IG5A -- 2.49.1