From aa153c4ec9e6856d375123740054174986fac09f Mon Sep 17 00:00:00 2001 From: tebarius Date: Wed, 23 Jul 2025 20:51:02 +0200 Subject: [PATCH] PSE, Nak-Nak, Navajo, PI and patching favicon.ico and index.html in streamlit-lib --- Dockerfile | 2 + app/app.py | 29 ++- app/tools.py | 416 ++++++++++++++++-------------------- patch-streamlit/favicon.ico | Bin 0 -> 162947 bytes patch-streamlit/index.html | 47 ++++ 5 files changed, 261 insertions(+), 233 deletions(-) create mode 100644 patch-streamlit/favicon.ico create mode 100644 patch-streamlit/index.html diff --git a/Dockerfile b/Dockerfile index 4bd8389..84ba490 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,6 +14,8 @@ RUN pip3 install -r requirements.txt COPY ./app /app +COPY ./patch-streamlit/* /usr/local/lib/python3.13/site-packages/streamlit/static/ + EXPOSE 8501 HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health diff --git a/app/app.py b/app/app.py index d358cce..a83bd7e 100644 --- a/app/app.py +++ b/app/app.py @@ -7,8 +7,9 @@ standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bi ' Eingabefeld aufrufen.') st.set_page_config( - page_title="tebarius Mysteryhelfer (web)", - page_icon="./favicon.ico", + # we do this by patching static-files of streamlit in the container + # page_title="tebarius Mysteryhelfer (web)", + # page_icon="./favicon.ico", layout="wide" ) @@ -144,6 +145,21 @@ def auswahl_verarbeiten(): elif auswahl == "Slash and Pipe->Text": st.session_state.output_text = tools.slashpipe_to_text(text) st.session_state.map_data = None + elif auswahl == "PSE: O.zahl<->Symbol": + st.session_state.output_text = tools.periodensystem(text) + st.session_state.map_data = None + elif auswahl == "Nak-Nak -> Text": + st.session_state.output_text = tools.naknak_to_text(text) + st.session_state.map_data = None + elif auswahl == "Navajo -> Text": + st.session_state.output_text = tools.navajo_to_text(text) + st.session_state.map_data = None + elif auswahl == "Kreiszahl PI": + st.session_state.output_text = tools.pi_suche(text) + st.session_state.map_data = None + elif auswahl == "REPLACE": + st.session_state.output_text = tools.REPLACE(text) + st.session_state.map_data = None elif auswahl == "REPLACE": st.session_state.output_text = tools.REPLACE(text) st.session_state.map_data = None @@ -212,6 +228,15 @@ option = st.sidebar.radio("hidden_label", "Tomtom->Text", "Text->Slash and Pipe", "Slash and Pipe->Text", + "PSE: O.zahl<->Symbol", + "Nak-Nak -> Text", + "Navajo -> Text", + "Kreiszahl PI", + "", + "", + "", + "", + "", "", ), key='option', diff --git a/app/tools.py b/app/tools.py index b5ec537..d8c73a4 100644 --- a/app/tools.py +++ b/app/tools.py @@ -1,6 +1,7 @@ -from itertools import chain +from itertools import chain # für primfaktoren zerlegung import helper import pandas as pd +from urllib.parse import unquote as urllib_parse_unquote # für nak-nak def funktion_mit_karte(text,param): """Verarbeitet Text und liefert Daten für eine Karte (z.B. Potsdam Zentrum).""" @@ -978,7 +979,6 @@ def primfaktoren(eingabetext): out += str(z) + ", " return out[:-2] - def dez_to_hex_oct_bin(eingabetext): seperator = ("|,", "_", "/", ";", ",") eingabetext = eingabetext.rstrip() @@ -1025,7 +1025,6 @@ def dez_to_hex_oct_bin(eingabetext): ausgabetext += f"_BIN:_ {bintxt[:-1]} \n" return ausgabetext - def hex_to_dez_oct_bin(eingabetext): seperator = ("|,", "_", "/", ";", ",") eingabetext = eingabetext.rstrip() @@ -1221,7 +1220,6 @@ def tomtom_to_abc(eingabetext): atxt = atxt + alphabet[sign] return atxt - def text_to_slashpipe(eingabetext): alphabet = {"a": "| ", "b": "|\\\\ ", "c": "|| ", "d": "|/ ", "e": "\\\\ ", "f": "||\\\\ ", "g": "||| ", "h": "\\\\\\\\ ", "i": "/ ", "j": "|\\\\\\\\ ", "k": "//|| ", "l": "|\\\\/ ", "m": "|\\\\| ", @@ -1276,8 +1274,7 @@ def slashpipe_to_text(eingabetext): atxt = atxt + alphabet[sign] return atxt -''' -def periodensystem(): +def periodensystem(eingabetext): seperator = ("|,", "_", ".", "-", "/", ";", ",") pse = {1: "H", 2: "He", 3: "Li", 4: "Be", 5: "B", 6: "C", 7: "N", 8: "O", 9: "F", 10: "Ne", 11: "Na", 12: "Mg", 13: "Al", @@ -1294,23 +1291,16 @@ def periodensystem(): 103: "Lr", 104: "Rf", 105: "Db", 106: "Sg", 107: "Bh", 108: "Hs", 109: "Mt", 110: "Ds", 111: "Rg", 112: "Cn", 113: "Nh", 114: "Fl", 115: "Mc", 116: "Lv", 117: "Ts", 118: "Og"} um_pse = {v: k for k, v in pse.items()} - - eingabetext = Eingabe.get(1.0, END) eingabetext = eingabetext.rstrip() if eingabetext == "": - Ausgabe.insert(1.0, """HILFE: [Periodensystem: Ordnungszahl<->Symbol] -Eingegebenen Ordnungszahlen 1-118 aus dem Periodensystem der -Elemente werden in die ihnen zugehörigen Elementsymbole umgewandelt -und anschließend als Text ausgegeben, außerdem erscheint noch eine -Ausgabe bei welcher nur die Anfangsbuchstaben der Symbole ausgegeben -werden. -Werden in der Eingabe Symbole (z.B. N, He) erkannt werde diese -zusammen mit ihren Ordnungszahlen ausgegeben. -Als Trennungszeichen zwischen den Zahlen und/oder Symbolen sind -folgende Zeichen erlaubt: | , _ . - / ; , und Leerzeichen. -Bei Verwendung von Leerzeichen sollten möglichst nur 1 Leerzeichen -zwischen den Zahlen verwendet werden (überzählige Leerzeichen werden -sonst als nicht erkannte Zeichen behandelt).""" + "\n\n") + return ("### Periodensystem: Ordnungszahl<->Symbol\n" + "Eingegebenen Ordnungszahlen 1-118 aus dem Periodensystem der Elemente werden in die ihnen zugehörigen " + "Elementsymbole umgewandelt und anschließend als Text ausgegeben, außerdem erscheint noch eine Ausgabe " + "bei welcher nur die Anfangsbuchstaben der Symbole ausgegeben werden. Werden in der Eingabe Symbole " + "(z.B. N, He) erkannt werde diese zusammen mit ihren Ordnungszahlen ausgegeben. Als Trennungszeichen " + "zwischen den Zahlen und/oder Symbolen sind folgende Zeichen erlaubt: | , _ . - / ; , und Leerzeichen. " + "Bei Verwendung von Leerzeichen sollten möglichst nur 1 Leerzeichen zwischen den Zahlen verwendet " + "werden (überzählige Leerzeichen werden sonst als nicht erkannte Zeichen behandelt).") else: se = "" for s in seperator: @@ -1323,12 +1313,13 @@ sonst als nicht erkannte Zeichen behandelt).""" + "\n\n") ausz = int(eingabetext) except ValueError: if eingabetext in um_pse: - Ausgabe.insert(1.0, str(um_pse[eingabetext]) + "\n") + return str(um_pse[eingabetext]) else: - Ausgabe.insert(1.0, "Keine gültige Eingabe erkannt!\n", "re") + return "Keine gültige Eingabe erkannt!" else: - Ausgabe.insert(1.0, pse[ausz] + "\n") + return pse[ausz] else: + ausgabetext = "" txt = eingabetext.split(se) atxt = "" atxt2 = "" @@ -1344,159 +1335,34 @@ sonst als nicht erkannte Zeichen behandelt).""" + "\n\n") ignor = ignor + z + " " else: if az in pse: - atxt = atxt + pse[az] + atxt = atxt + pse[az] + " " atxt2 = atxt2 + pse[az][0] else: ignor = ignor + z + " " - if atxt3 != "": - Ausgabe.insert(1.0, " " + atxt3 + "\n") - Ausgabe.insert(1.0, "Symbol:Ordnungszahl:", "bu") - if atxt2 != "": - Ausgabe.insert(1.0, " " + atxt2 + "\n") - Ausgabe.insert(1.0, "Nur Anfangsbuchstaben:", "bu") - if atxt != "": - Ausgabe.insert(1.0, " " + atxt + "\n") - Ausgabe.insert(1.0, "Symbole:", "bu") if ignor != "": - Ausgabe.insert(1.0, ignor + "\n") - Ausgabe.insert(1.0, "Achtung nicht erkannte Zeichen:\n", "re") + ausgabetext += "_Achtung nicht erkannte Zeichen:_ \n" + ignor + " \n" + if atxt != "": + ausgabetext += "_Symbole:_ \n" + atxt + " \n" + if atxt2 != "": + ausgabetext += "_Nur Anfangsbuchstaben:_ \n" + atxt2 + " \n" + if atxt3 != "": + ausgabetext += "_Symbol:Ordnungszahl_ \n" + atxt3 + " \n" + return ausgabetext - -def brainfuck_interpreter(): - - eingabetext = Eingabe.get(1.0, END) - eingabetext = eingabetext.rstrip() - if eingabetext == "": - Ausgabe.insert(1.0, """HILFE: [Brainfuckinterpreter] -!!!!!ACHTUNG DIESE FUNKTION KANN DAS PROGRAMM ZUM ABSTURZ BRINGEN!!!!! -Brainfuck gehört zu den sogenannten esoterischen -Programmiersprachen. Der Programmcode setzt sich -hier aus den 8 Zeichen ><+-.,[]' zusammen. -Diese Funktion führt einen derartigen Programmcode -aus, und gibt das Ergebnis aus, welches bei Geocaches -meist eine kurze Nachricht oder die Koordinaten sind. -Für eine umgekehrte Umwandlung von Text in Brainfuckcode -gibt es im Internet genügend Möglichkeiten zu finden. -Folgender Code wäre z.B. "Hello World!" in Brainfuck: -++++++++++[>+++++++>++++++++++>+++>+<<<<-] ->++.>+.+++++++..+++.>++.<<+++++++++++++++. ->.+++.------.--------.>+.>.""" + "\n\n") - 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 - Ausgabe.insert(1.0, "".join(rv) + "\n") - - -def ook_interpreter(): - - eingabetext = Eingabe.get(1.0, END) - eingabetext = eingabetext.rstrip() - if eingabetext == "": - Ausgabe.insert(1.0, """HILFE: [Ook-Interpreter] -!!!!!ACHTUNG DIESE FUNKTION KANN DAS PROGRAMM ZUM ABSTURZ BRINGEN!!!!! -Ook ist eine Abwandlung von Brainfuck wobei die -8 Zeichen von Brainfuck hier durch eine Kombination -von je zwei der folgenden 3 Satzzeichen .!? ersetzt -werden. Dabei wird dann je das 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.""" + "\n\n") - else: - ookzeichen = [".", "!", "?"] - ooktext = "" - 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 - Ausgabe.insert(1.0, "".join(rv) + "\n") - - -def naknaktotext(): +def naknak_to_text(eingabetext): nakwb = {"Nak": "0", "Naknak": "6", "nanak": "B", "Nanak": "1", "Naknaknak": "7", "naknak": "C", "Nananak": "2", "Nak.": "8", "nak!": "D", "Nanananak": "3", "Naknak.": "9", "nak.": "E", "Nak?": "4", "Naknaknaknak": "A", "naknaknak": "F", "nak?": "5"} - - eingabetext = Eingabe.get(1.0, END) eingabetext = eingabetext.rstrip() if eingabetext == "": - Ausgabe.insert(1.0, """HILFE: [NakNak to Text] -Nak-Nak / Entensprache / Duck Speak ist eine Spaßsprache, -welche vom Owner der Website schnatterente.net entwickelt -wurde. -Diese Funktion übersetzt das Geschnatter in verständliche -Buchstaben/Zeichen. -!!Bitte unbedingt die Groß- und Kleinschreibung beibehalten!! -Wer diesen Quatsch unbedingt umgekehrt übersetzten will, -findet auf hier den passenden Übersetzer: -http://uebersetzer.schnatterente.net""" + "\n\n") + return ("### NakNak to Text\n" + "Nak-Nak / Entensprache / Duck Speak ist eine Spaßsprache, welche vom Owner der Website " + "[https://schnatterente.net](https://web.archive.org/web/20230807065421/https://www.schnatterente.net/)" + " entwickelt wurde. Diese Funktion übersetzt das Geschnatter in verständliche Buchstaben/Zeichen. " + "!!Bitte unbedingt die Groß- und Kleinschreibung beibehalten!! Wer diesen Quatsch unbedingt umgekehrt " + "übersetzten will, wird wohl etwas suchen müssen, da der Original-Übersetzer, der unter " + "http://uebersetzer.schnatterente.net erreichbar war, nicht mehr online ist und ich ganz bestimmt " + "keinen hier integrieren werde.") else: txt = eingabetext.split() utxt = "" @@ -1509,11 +1375,9 @@ http://uebersetzer.schnatterente.net""" + "\n\n") utxt = utxt + nakwb[nak] z = 1 atxt = urllib_parse_unquote(utxt) - Ausgabe.insert(1.0, atxt + "\n") - Ausgabe.insert(1.0, "dekodiertes Geschnatter:", "bu") + return "_dekodiertes Geschnatter:_ \n" + atxt - -def navajototext(): +def navajo_to_text(eingabetext): nabc = {"WOL-LA-CHEE": "A", "BE-LA-SANA": "A", "TSE-NILL": "A", "NA-HASH-CHID": "B", "SHUSH": "B", "TOISH-JEH": "B", "MOASI": "C", "TLA-GIN": "C", "BA-GOSHI": "C", "BE": "D", "CHINDI": "D", "LHA-CHA-EH": "D", "AH-JAH": "E", "DZEH": "E", "AH-NAH": "E", "CHUO": "F", "TSA-E-DONIN-EE": "F", "MA-E": "F", "AH-TAD": "G", "KLIZZIE": "G", @@ -1526,25 +1390,19 @@ def navajototext(): "DIBEH": "S", "KLESH": "S", "D-AH": "T", "A-WOH": "T", "THAN-ZIE": "T", "SHI-DA": "U", "NO-DA-IH": "U", "A-KEH-DI-GLINI": "V", "GLOE-IH": "W", "AL-NA-AS-DZOH": "X", "AL-AN-AS-DZOH": "X", "TSAH-AS-ZIH": "Y", "BESH-DO-TLIZ": "Z", "BESH-DO-GLIZ": "Z", "BE-TKAH": " "} - - eingabetext = Eingabe.get(1.0, END) eingabetext = eingabetext.rstrip() if eingabetext == "": - Ausgabe.insert(1.0, """HILFE: [Navajo-ABC to Text] -Die Sprache der Navajo-Indianer wurde im zweiten Weltkrieg für -den verschlüßelten Funkverkehr eingesetzt. Vorteile waren, daß -nahezu niemand außer Navajo-Volk die Sprache verstand und es keine -schriftlichen Aufzeichnungen über die Sprache gab. Das Alphabet -und die Codewörter wurden dabei von den Codesprechern (natürlich -Navajo's) auswendig gelernt. -Die Dekodierfunktion hier übersetzt das Codealphabet (A-Z), bei welchem es -auch so ist, daß unterschiedliche Worte für den selben Buchstaben stehen, -in normalen Text. Leider existieren leicht unterschiedliche Alphabete was -die Wörter bzw. deren Schreibweise angeht im Netz, mit welchen codiert wird, -weshalb ich hier nur die Dekodierung anbiete. -weitere Codewörter und Erklärungen gibt es z.B. hier: -https://ww2db.com/other.php?other_id=29 -http://math.ucsd.edu/~crypto/Projects/RobertoSandoval/NavajoWindtalkers.pdf""" + "\n\n") + return ("### Navajo-ABC to Text\n" + "Die Sprache der Navajo-Indianer wurde im zweiten Weltkrieg für den verschlüßelten Funkverkehr " + "eingesetzt. Vorteile waren, daß nahezu niemand außer Navajo-Volk die Sprache verstand und es keine " + "schriftlichen Aufzeichnungen über die Sprache gab. Das Alphabet und die Codewörter wurden dabei von " + "den Codesprechern (natürlich Navajo's) auswendig gelernt. Die Dekodierfunktion hier übersetzt das " + "Codealphabet (A-Z), bei welchem es auch so ist, daß unterschiedliche Worte für den selben Buchstaben " + "stehen, in normalen Text. Leider existieren leicht unterschiedliche Alphabete was die Wörter bzw. " + "deren Schreibweise angeht im Netz, mit welchen codiert wird, weshalb ich hier nur die Dekodierung " + "anbiete. weitere Codewörter und Erklärungen gibt es z.B. hier: " + "https://ww2db.com/other.php?other_id=29 oder hier: " + "http://math.ucsd.edu/~crypto/Projects/RobertoSandoval/NavajoWindtalkers.pdf") else: txt = eingabetext.split() atxt = "" @@ -1552,38 +1410,21 @@ http://math.ucsd.edu/~crypto/Projects/RobertoSandoval/NavajoWindtalkers.pdf""" + w = wort.upper() if w in nabc: atxt = atxt + nabc[w] - Ausgabe.insert(1.0, atxt + "\n") - Ausgabe.insert(1.0, "dekodierter Text:", "bu") + return "_dekodierter Text:_ \n" + atxt - -def pi_suche(): - hilfetext = """HILFE: [PI Nachkommastellensuche] -Für die eingegebene Zahl/Zahlenreihe X wird versucht die -entsprechende X. Nachkommastelle auszugeben und das erst -Vorkommen der Zahlenreihe X innerhalb der Nachkommastellen -von PI (3.141592653589793238462643...) zu ermitteln. - -Da es deutlich schnneller geht mit einer vorgefertigten -Datei zu suchen als die Nachkommastellen zu berechnen -wird die Datei pi.txt im Unterverzeichnis "data" benötigt. -Diese Datei enthält die Zahl PI mit den ersten 10 Millionen -Nachkommastellen. Wer mehr Stellen braucht, kann sich mit -dem Tool y-cruncher (http://numberworld.org/y-cruncher/) -auch eine Datei mit deutlich mehr Nachkommastellen erstellen -und pi.txt damit ersetzen. (Bei 1 Millarde Stellen ist -die Datei dann allerdings schon knapp 1 GB groß und -die Abfrage dauert auch etwas länger) -""" - - eingabetext = Eingabe.get(1.0, END) +def pi_suche(eingabetext): eingabetext = eingabetext.rstrip() if eingabetext == "": - Ausgabe.insert(1.0, hilfetext + "\n") + return ("### PI Nachkommastellensuche\n" + "Für die eingegebene Zahl/Zahlenreihe X wird versucht die entsprechende X. Nachkommastelle auszugeben " + "und das erst Vorkommen der Zahlenreihe X innerhalb der Nachkommastellen von PI " + "(3.141592653589793238462643...) zu ermitteln. Aus Performance- und Speicherplatzgründen ist die Suche " + "auf die ersten 10 Millionen Nachkommastellen beschränkt.") else: try: piread = open("./data/pi.txt", "r") except FileNotFoundError: - Ausgabe.insert(1.0, hilfetext + "\n") + return "Sorry es scheint die Datei pi.txt zu fehlen, welche von dieser Funktion benötigt wird." else: pistr = "" for zeile in piread: @@ -1593,34 +1434,31 @@ die Abfrage dauert auch etwas länger) try: zahlx = int(eingabetext) except ValueError: - Ausgabe.insert(1.0, "Sorry aber ohne gültige Zahleneingabe funktioniert das nicht!\n", "re") + return "Sorry aber ohne gültige Zahleneingabe funktioniert das nicht!" else: + ausgabetext = "_PI (Kreiszahl)_ \n" pos = pistr.find(eingabetext) - if pos == -1: - Ausgabe.insert(1.0, "Zahlenreihe in {} Nachkommastellen nicht zu finden.\n\n".format(pilen), "re") - else: - Ausgabe.insert(1.0, - "20 Stellen ab {}. Nachkommstelle: {}...\n\n".format(pos - 1, pistr[pos:pos + 20])) - Ausgabe.insert(1.0, 'erstes Vorkommen von Zahlenfolge "{}" ab {}. Nachkommastelle\n'.format( - eingabetext.rstrip(), pos - 1)) if pilen >= zahlx > 0: - Ausgabe.insert(1.0, "20 Stellen ab {}. Nachkommstelle: " - "{}...\n\n".format(zahlx, pistr[zahlx + 1:zahlx + 21])) - Ausgabe.insert(1.0, "Die {}. Nachkommstelle: lautet {}\n".format(zahlx, pistr[zahlx + 1])) + ausgabetext += (f"_Die {zahlx}. Nachkommstelle lautet:_ {pistr[zahlx + 1]} \n_20 Stellen ab " + f"{zahlx}. Nachkommstelle:_ {pistr[zahlx + 1:zahlx + 21]}... \n") else: - Ausgabe.insert(1.0, "Die verwendete pi.txt kennt leider nur {} Nachkommstellen.\n\n".format(pilen), - "re") - Ausgabe.insert(1.0, "PI (Kreiszahl)\n\n", "gr") - + ausgabetext += f"_Die verwendete pi.txt kennt leider nur {pilen:,} Nachkommstellen._ \n" + if pos == -1: + ausgabetext += f"_Zahlenreihe in {pilen:,} Nachkommastellen nicht zu finden._" + else: + ausgabetext += (f'erstes Vorkommen von Zahlenfolge "{eingabetext.rstrip()}" ab {pos - 1}. ' + f'Nachkommastelle \n20 Stellen ab {pos - 1}. Nachkommstelle: ' + f'{pistr[pos:pos + 20]}...') + return ausgabetext +''' def anagramm_suche_de(): hilfetext = """HILFE: [Anagrammsuche mit Wörterbuch] -Diese Funktion benutzt die deutsche Wörterbuchdatei german.dic +Diese Funktion benutzt eine deutsche Wörterbuchdatei vom Project https://sourceforge.net/projects/germandict um zu überprüfen ob sich unter Verwendung aller eingegebenen Buchstaben Wörter bilden lassen, welche im Wörtebuch vorkommen. -Die Datei german.dic muß sich dafür im Unterverzeichnis "data" -befinden. + """ eingabetext = Eingabe.get(1.0, END) @@ -3717,4 +3555,120 @@ für alle Zeilenanzahlen von 2-12.""" + "\n\n") except ValueError: Ausgabe.insert(1.0, "Schlüsselzahl fehlerhaft oder kleiner als 2.\n", "re") + +def brainfuck_interpreter(): + eingabetext = Eingabe.get(1.0, END) + eingabetext = eingabetext.rstrip() + if eingabetext == "": + Ausgabe.insert(1.0, """HILFE: [Brainfuckinterpreter] +!!!!!ACHTUNG DIESE FUNKTION KANN DAS PROGRAMM ZUM ABSTURZ BRINGEN!!!!! +Brainfuck gehört zu den sogenannten esoterischen +Programmiersprachen. Der Programmcode setzt sich +hier aus den 8 Zeichen ><+-.,[]' zusammen. +Diese Funktion führt einen derartigen Programmcode +aus, und gibt das Ergebnis aus, welches bei Geocaches +meist eine kurze Nachricht oder die Koordinaten sind. +Für eine umgekehrte Umwandlung von Text in Brainfuckcode +gibt es im Internet genügend Möglichkeiten zu finden. +Folgender Code wäre z.B. "Hello World!" in Brainfuck: +++++++++++[>+++++++>++++++++++>+++>+<<<<-] +>++.>+.+++++++..+++.>++.<<+++++++++++++++. +>.+++.------.--------.>+.>.""" + "\n\n") + 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 + Ausgabe.insert(1.0, "".join(rv) + "\n") + + +def ook_interpreter(): + eingabetext = Eingabe.get(1.0, END) + eingabetext = eingabetext.rstrip() + if eingabetext == "": + Ausgabe.insert(1.0, """HILFE: [Ook-Interpreter] +!!!!!ACHTUNG DIESE FUNKTION KANN DAS PROGRAMM ZUM ABSTURZ BRINGEN!!!!! +Ook ist eine Abwandlung von Brainfuck wobei die +8 Zeichen von Brainfuck hier durch eine Kombination +von je zwei der folgenden 3 Satzzeichen .!? ersetzt +werden. Dabei wird dann je das 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.""" + "\n\n") + else: + ookzeichen = [".", "!", "?"] + ooktext = "" + 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 + Ausgabe.insert(1.0, "".join(rv) + "\n") + + ''' diff --git a/patch-streamlit/favicon.ico b/patch-streamlit/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..898675c2308e007d94bf1e70b1242dcda5f0ab33 GIT binary patch literal 162947 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
A2Rm($=Aj1QCaLn4IbUf% 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 m$+?GDok9-Vw~il6(q1*IR4Y=WKJrIsXrSz%i=; literal 0 HcmV?d00001 diff --git a/patch-streamlit/index.html b/patch-streamlit/index.html new file mode 100644 index 0000000..2367c7f --- /dev/null +++ b/patch-streamlit/index.html @@ -0,0 +1,47 @@ + + + + + + + + + + + tebarius Mysteryhelfer (web) + + + + + + + + +
+ +