PSE, Nak-Nak, Navajo, PI
and patching favicon.ico and index.html in streamlit-lib
This commit is contained in:
@@ -14,6 +14,8 @@ RUN pip3 install -r requirements.txt
|
|||||||
|
|
||||||
COPY ./app /app
|
COPY ./app /app
|
||||||
|
|
||||||
|
COPY ./patch-streamlit/* /usr/local/lib/python3.13/site-packages/streamlit/static/
|
||||||
|
|
||||||
EXPOSE 8501
|
EXPOSE 8501
|
||||||
|
|
||||||
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
|
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
|
||||||
|
|||||||
29
app/app.py
29
app/app.py
@@ -7,8 +7,9 @@ standard_output = ('#### Um den HILFE-Text zu einzelnen Funktionen aufzurufen bi
|
|||||||
' Eingabefeld aufrufen.')
|
' Eingabefeld aufrufen.')
|
||||||
|
|
||||||
st.set_page_config(
|
st.set_page_config(
|
||||||
page_title="tebarius Mysteryhelfer (web)",
|
# we do this by patching static-files of streamlit in the container
|
||||||
page_icon="./favicon.ico",
|
# page_title="tebarius Mysteryhelfer (web)",
|
||||||
|
# page_icon="./favicon.ico",
|
||||||
layout="wide"
|
layout="wide"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -144,6 +145,21 @@ def auswahl_verarbeiten():
|
|||||||
elif auswahl == "Slash and Pipe->Text":
|
elif auswahl == "Slash and Pipe->Text":
|
||||||
st.session_state.output_text = tools.slashpipe_to_text(text)
|
st.session_state.output_text = tools.slashpipe_to_text(text)
|
||||||
st.session_state.map_data = None
|
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":
|
elif auswahl == "REPLACE":
|
||||||
st.session_state.output_text = tools.REPLACE(text)
|
st.session_state.output_text = tools.REPLACE(text)
|
||||||
st.session_state.map_data = None
|
st.session_state.map_data = None
|
||||||
@@ -212,6 +228,15 @@ option = st.sidebar.radio("hidden_label",
|
|||||||
"Tomtom->Text",
|
"Tomtom->Text",
|
||||||
"Text->Slash and Pipe",
|
"Text->Slash and Pipe",
|
||||||
"Slash and Pipe->Text",
|
"Slash and Pipe->Text",
|
||||||
|
"PSE: O.zahl<->Symbol",
|
||||||
|
"Nak-Nak -> Text",
|
||||||
|
"Navajo -> Text",
|
||||||
|
"Kreiszahl PI",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
"",
|
"",
|
||||||
),
|
),
|
||||||
key='option',
|
key='option',
|
||||||
|
|||||||
416
app/tools.py
416
app/tools.py
@@ -1,6 +1,7 @@
|
|||||||
from itertools import chain
|
from itertools import chain # für primfaktoren zerlegung
|
||||||
import helper
|
import helper
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
from urllib.parse import unquote as urllib_parse_unquote # für nak-nak
|
||||||
|
|
||||||
def funktion_mit_karte(text,param):
|
def funktion_mit_karte(text,param):
|
||||||
"""Verarbeitet Text und liefert Daten für eine Karte (z.B. Potsdam Zentrum)."""
|
"""Verarbeitet Text und liefert Daten für eine Karte (z.B. Potsdam Zentrum)."""
|
||||||
@@ -978,7 +979,6 @@ def primfaktoren(eingabetext):
|
|||||||
out += str(z) + ", "
|
out += str(z) + ", "
|
||||||
return out[:-2]
|
return out[:-2]
|
||||||
|
|
||||||
|
|
||||||
def dez_to_hex_oct_bin(eingabetext):
|
def dez_to_hex_oct_bin(eingabetext):
|
||||||
seperator = ("|,", "_", "/", ";", ",")
|
seperator = ("|,", "_", "/", ";", ",")
|
||||||
eingabetext = eingabetext.rstrip()
|
eingabetext = eingabetext.rstrip()
|
||||||
@@ -1025,7 +1025,6 @@ def dez_to_hex_oct_bin(eingabetext):
|
|||||||
ausgabetext += f"_BIN:_ {bintxt[:-1]} \n"
|
ausgabetext += f"_BIN:_ {bintxt[:-1]} \n"
|
||||||
return ausgabetext
|
return ausgabetext
|
||||||
|
|
||||||
|
|
||||||
def hex_to_dez_oct_bin(eingabetext):
|
def hex_to_dez_oct_bin(eingabetext):
|
||||||
seperator = ("|,", "_", "/", ";", ",")
|
seperator = ("|,", "_", "/", ";", ",")
|
||||||
eingabetext = eingabetext.rstrip()
|
eingabetext = eingabetext.rstrip()
|
||||||
@@ -1221,7 +1220,6 @@ def tomtom_to_abc(eingabetext):
|
|||||||
atxt = atxt + alphabet[sign]
|
atxt = atxt + alphabet[sign]
|
||||||
return atxt
|
return atxt
|
||||||
|
|
||||||
|
|
||||||
def text_to_slashpipe(eingabetext):
|
def text_to_slashpipe(eingabetext):
|
||||||
alphabet = {"a": "| ", "b": "|\\\\ ", "c": "|| ", "d": "|/ ", "e": "\\\\ ", "f": "||\\\\ ", "g": "||| ",
|
alphabet = {"a": "| ", "b": "|\\\\ ", "c": "|| ", "d": "|/ ", "e": "\\\\ ", "f": "||\\\\ ", "g": "||| ",
|
||||||
"h": "\\\\\\\\ ", "i": "/ ", "j": "|\\\\\\\\ ", "k": "//|| ", "l": "|\\\\/ ", "m": "|\\\\| ",
|
"h": "\\\\\\\\ ", "i": "/ ", "j": "|\\\\\\\\ ", "k": "//|| ", "l": "|\\\\/ ", "m": "|\\\\| ",
|
||||||
@@ -1276,8 +1274,7 @@ def slashpipe_to_text(eingabetext):
|
|||||||
atxt = atxt + alphabet[sign]
|
atxt = atxt + alphabet[sign]
|
||||||
return atxt
|
return atxt
|
||||||
|
|
||||||
'''
|
def periodensystem(eingabetext):
|
||||||
def periodensystem():
|
|
||||||
seperator = ("|,", "_", ".", "-", "/", ";", ",")
|
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",
|
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",
|
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",
|
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"}
|
113: "Nh", 114: "Fl", 115: "Mc", 116: "Lv", 117: "Ts", 118: "Og"}
|
||||||
um_pse = {v: k for k, v in pse.items()}
|
um_pse = {v: k for k, v in pse.items()}
|
||||||
|
|
||||||
eingabetext = Eingabe.get(1.0, END)
|
|
||||||
eingabetext = eingabetext.rstrip()
|
eingabetext = eingabetext.rstrip()
|
||||||
if eingabetext == "":
|
if eingabetext == "":
|
||||||
Ausgabe.insert(1.0, """HILFE: [Periodensystem: Ordnungszahl<->Symbol]
|
return ("### Periodensystem: Ordnungszahl<->Symbol\n"
|
||||||
Eingegebenen Ordnungszahlen 1-118 aus dem Periodensystem der
|
"Eingegebenen Ordnungszahlen 1-118 aus dem Periodensystem der Elemente werden in die ihnen zugehörigen "
|
||||||
Elemente werden in die ihnen zugehörigen Elementsymbole umgewandelt
|
"Elementsymbole umgewandelt und anschließend als Text ausgegeben, außerdem erscheint noch eine Ausgabe "
|
||||||
und anschließend als Text ausgegeben, außerdem erscheint noch eine
|
"bei welcher nur die Anfangsbuchstaben der Symbole ausgegeben werden. Werden in der Eingabe Symbole "
|
||||||
Ausgabe bei welcher nur die Anfangsbuchstaben der Symbole ausgegeben
|
"(z.B. N, He) erkannt werde diese zusammen mit ihren Ordnungszahlen ausgegeben. Als Trennungszeichen "
|
||||||
werden.
|
"zwischen den Zahlen und/oder Symbolen sind folgende Zeichen erlaubt: | , _ . - / ; , und Leerzeichen. "
|
||||||
Werden in der Eingabe Symbole (z.B. N, He) erkannt werde diese
|
"Bei Verwendung von Leerzeichen sollten möglichst nur 1 Leerzeichen zwischen den Zahlen verwendet "
|
||||||
zusammen mit ihren Ordnungszahlen ausgegeben.
|
"werden (überzählige Leerzeichen werden sonst als nicht erkannte Zeichen behandelt).")
|
||||||
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")
|
|
||||||
else:
|
else:
|
||||||
se = ""
|
se = ""
|
||||||
for s in seperator:
|
for s in seperator:
|
||||||
@@ -1323,12 +1313,13 @@ sonst als nicht erkannte Zeichen behandelt).""" + "\n\n")
|
|||||||
ausz = int(eingabetext)
|
ausz = int(eingabetext)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
if eingabetext in um_pse:
|
if eingabetext in um_pse:
|
||||||
Ausgabe.insert(1.0, str(um_pse[eingabetext]) + "\n")
|
return str(um_pse[eingabetext])
|
||||||
else:
|
else:
|
||||||
Ausgabe.insert(1.0, "Keine gültige Eingabe erkannt!\n", "re")
|
return "Keine gültige Eingabe erkannt!"
|
||||||
else:
|
else:
|
||||||
Ausgabe.insert(1.0, pse[ausz] + "\n")
|
return pse[ausz]
|
||||||
else:
|
else:
|
||||||
|
ausgabetext = ""
|
||||||
txt = eingabetext.split(se)
|
txt = eingabetext.split(se)
|
||||||
atxt = ""
|
atxt = ""
|
||||||
atxt2 = ""
|
atxt2 = ""
|
||||||
@@ -1344,159 +1335,34 @@ sonst als nicht erkannte Zeichen behandelt).""" + "\n\n")
|
|||||||
ignor = ignor + z + " "
|
ignor = ignor + z + " "
|
||||||
else:
|
else:
|
||||||
if az in pse:
|
if az in pse:
|
||||||
atxt = atxt + pse[az]
|
atxt = atxt + pse[az] + " "
|
||||||
atxt2 = atxt2 + pse[az][0]
|
atxt2 = atxt2 + pse[az][0]
|
||||||
else:
|
else:
|
||||||
ignor = ignor + z + " "
|
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 != "":
|
if ignor != "":
|
||||||
Ausgabe.insert(1.0, ignor + "\n")
|
ausgabetext += "_Achtung nicht erkannte Zeichen:_ \n" + ignor + " \n"
|
||||||
Ausgabe.insert(1.0, "Achtung nicht erkannte Zeichen:\n", "re")
|
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 naknak_to_text(eingabetext):
|
||||||
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():
|
|
||||||
nakwb = {"Nak": "0", "Naknak": "6", "nanak": "B", "Nanak": "1", "Naknaknak": "7", "naknak": "C", "Nananak": "2",
|
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",
|
"Nak.": "8", "nak!": "D", "Nanananak": "3", "Naknak.": "9", "nak.": "E", "Nak?": "4", "Naknaknaknak": "A",
|
||||||
"naknaknak": "F", "nak?": "5"}
|
"naknaknak": "F", "nak?": "5"}
|
||||||
|
|
||||||
eingabetext = Eingabe.get(1.0, END)
|
|
||||||
eingabetext = eingabetext.rstrip()
|
eingabetext = eingabetext.rstrip()
|
||||||
if eingabetext == "":
|
if eingabetext == "":
|
||||||
Ausgabe.insert(1.0, """HILFE: [NakNak to Text]
|
return ("### NakNak to Text\n"
|
||||||
Nak-Nak / Entensprache / Duck Speak ist eine Spaßsprache,
|
"Nak-Nak / Entensprache / Duck Speak ist eine Spaßsprache, welche vom Owner der Website "
|
||||||
welche vom Owner der Website schnatterente.net entwickelt
|
"[https://schnatterente.net](https://web.archive.org/web/20230807065421/https://www.schnatterente.net/)"
|
||||||
wurde.
|
" entwickelt wurde. Diese Funktion übersetzt das Geschnatter in verständliche Buchstaben/Zeichen. "
|
||||||
Diese Funktion übersetzt das Geschnatter in verständliche
|
"!!Bitte unbedingt die Groß- und Kleinschreibung beibehalten!! Wer diesen Quatsch unbedingt umgekehrt "
|
||||||
Buchstaben/Zeichen.
|
"übersetzten will, wird wohl etwas suchen müssen, da der Original-Übersetzer, der unter "
|
||||||
!!Bitte unbedingt die Groß- und Kleinschreibung beibehalten!!
|
"http://uebersetzer.schnatterente.net erreichbar war, nicht mehr online ist und ich ganz bestimmt "
|
||||||
Wer diesen Quatsch unbedingt umgekehrt übersetzten will,
|
"keinen hier integrieren werde.")
|
||||||
findet auf hier den passenden Übersetzer:
|
|
||||||
http://uebersetzer.schnatterente.net""" + "\n\n")
|
|
||||||
else:
|
else:
|
||||||
txt = eingabetext.split()
|
txt = eingabetext.split()
|
||||||
utxt = ""
|
utxt = ""
|
||||||
@@ -1509,11 +1375,9 @@ http://uebersetzer.schnatterente.net""" + "\n\n")
|
|||||||
utxt = utxt + nakwb[nak]
|
utxt = utxt + nakwb[nak]
|
||||||
z = 1
|
z = 1
|
||||||
atxt = urllib_parse_unquote(utxt)
|
atxt = urllib_parse_unquote(utxt)
|
||||||
Ausgabe.insert(1.0, atxt + "\n")
|
return "_dekodiertes Geschnatter:_ \n" + atxt
|
||||||
Ausgabe.insert(1.0, "dekodiertes Geschnatter:", "bu")
|
|
||||||
|
|
||||||
|
def navajo_to_text(eingabetext):
|
||||||
def navajototext():
|
|
||||||
nabc = {"WOL-LA-CHEE": "A", "BE-LA-SANA": "A", "TSE-NILL": "A", "NA-HASH-CHID": "B", "SHUSH": "B", "TOISH-JEH": "B",
|
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",
|
"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",
|
"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",
|
"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",
|
"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": " "}
|
"BESH-DO-TLIZ": "Z", "BESH-DO-GLIZ": "Z", "BE-TKAH": " "}
|
||||||
|
|
||||||
eingabetext = Eingabe.get(1.0, END)
|
|
||||||
eingabetext = eingabetext.rstrip()
|
eingabetext = eingabetext.rstrip()
|
||||||
if eingabetext == "":
|
if eingabetext == "":
|
||||||
Ausgabe.insert(1.0, """HILFE: [Navajo-ABC to Text]
|
return ("### Navajo-ABC to Text\n"
|
||||||
Die Sprache der Navajo-Indianer wurde im zweiten Weltkrieg für
|
"Die Sprache der Navajo-Indianer wurde im zweiten Weltkrieg für den verschlüßelten Funkverkehr "
|
||||||
den verschlüßelten Funkverkehr eingesetzt. Vorteile waren, daß
|
"eingesetzt. Vorteile waren, daß nahezu niemand außer Navajo-Volk die Sprache verstand und es keine "
|
||||||
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 "
|
||||||
schriftlichen Aufzeichnungen über die Sprache gab. Das Alphabet
|
"den Codesprechern (natürlich Navajo's) auswendig gelernt. Die Dekodierfunktion hier übersetzt das "
|
||||||
und die Codewörter wurden dabei von den Codesprechern (natürlich
|
"Codealphabet (A-Z), bei welchem es auch so ist, daß unterschiedliche Worte für den selben Buchstaben "
|
||||||
Navajo's) auswendig gelernt.
|
"stehen, in normalen Text. Leider existieren leicht unterschiedliche Alphabete was die Wörter bzw. "
|
||||||
Die Dekodierfunktion hier übersetzt das Codealphabet (A-Z), bei welchem es
|
"deren Schreibweise angeht im Netz, mit welchen codiert wird, weshalb ich hier nur die Dekodierung "
|
||||||
auch so ist, daß unterschiedliche Worte für den selben Buchstaben stehen,
|
"anbiete. weitere Codewörter und Erklärungen gibt es z.B. hier: "
|
||||||
in normalen Text. Leider existieren leicht unterschiedliche Alphabete was
|
"https://ww2db.com/other.php?other_id=29 oder hier: "
|
||||||
die Wörter bzw. deren Schreibweise angeht im Netz, mit welchen codiert wird,
|
"http://math.ucsd.edu/~crypto/Projects/RobertoSandoval/NavajoWindtalkers.pdf")
|
||||||
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")
|
|
||||||
else:
|
else:
|
||||||
txt = eingabetext.split()
|
txt = eingabetext.split()
|
||||||
atxt = ""
|
atxt = ""
|
||||||
@@ -1552,38 +1410,21 @@ http://math.ucsd.edu/~crypto/Projects/RobertoSandoval/NavajoWindtalkers.pdf""" +
|
|||||||
w = wort.upper()
|
w = wort.upper()
|
||||||
if w in nabc:
|
if w in nabc:
|
||||||
atxt = atxt + nabc[w]
|
atxt = atxt + nabc[w]
|
||||||
Ausgabe.insert(1.0, atxt + "\n")
|
return "_dekodierter Text:_ \n" + atxt
|
||||||
Ausgabe.insert(1.0, "dekodierter Text:", "bu")
|
|
||||||
|
|
||||||
|
def pi_suche(eingabetext):
|
||||||
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)
|
|
||||||
eingabetext = eingabetext.rstrip()
|
eingabetext = eingabetext.rstrip()
|
||||||
if eingabetext == "":
|
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:
|
else:
|
||||||
try:
|
try:
|
||||||
piread = open("./data/pi.txt", "r")
|
piread = open("./data/pi.txt", "r")
|
||||||
except FileNotFoundError:
|
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:
|
else:
|
||||||
pistr = ""
|
pistr = ""
|
||||||
for zeile in piread:
|
for zeile in piread:
|
||||||
@@ -1593,34 +1434,31 @@ die Abfrage dauert auch etwas länger)
|
|||||||
try:
|
try:
|
||||||
zahlx = int(eingabetext)
|
zahlx = int(eingabetext)
|
||||||
except ValueError:
|
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:
|
else:
|
||||||
|
ausgabetext = "_PI (Kreiszahl)_ \n"
|
||||||
pos = pistr.find(eingabetext)
|
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:
|
if pilen >= zahlx > 0:
|
||||||
Ausgabe.insert(1.0, "20 Stellen ab {}. Nachkommstelle: "
|
ausgabetext += (f"_Die {zahlx}. Nachkommstelle lautet:_ {pistr[zahlx + 1]} \n_20 Stellen ab "
|
||||||
"{}...\n\n".format(zahlx, pistr[zahlx + 1:zahlx + 21]))
|
f"{zahlx}. Nachkommstelle:_ {pistr[zahlx + 1:zahlx + 21]}... \n")
|
||||||
Ausgabe.insert(1.0, "Die {}. Nachkommstelle: lautet {}\n".format(zahlx, pistr[zahlx + 1]))
|
|
||||||
else:
|
else:
|
||||||
Ausgabe.insert(1.0, "Die verwendete pi.txt kennt leider nur {} Nachkommstellen.\n\n".format(pilen),
|
ausgabetext += f"_Die verwendete pi.txt kennt leider nur {pilen:,} Nachkommstellen._ \n"
|
||||||
"re")
|
if pos == -1:
|
||||||
Ausgabe.insert(1.0, "PI (Kreiszahl)\n\n", "gr")
|
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():
|
def anagramm_suche_de():
|
||||||
hilfetext = """HILFE: [Anagrammsuche mit Wörterbuch]
|
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
|
vom Project https://sourceforge.net/projects/germandict um
|
||||||
zu überprüfen ob sich unter Verwendung aller eingegebenen
|
zu überprüfen ob sich unter Verwendung aller eingegebenen
|
||||||
Buchstaben Wörter bilden lassen, welche im Wörtebuch vorkommen.
|
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)
|
eingabetext = Eingabe.get(1.0, END)
|
||||||
@@ -3717,4 +3555,120 @@ für alle Zeilenanzahlen von 2-12.""" + "\n\n")
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
Ausgabe.insert(1.0, "Schlüsselzahl fehlerhaft oder kleiner als 2.\n", "re")
|
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")
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|||||||
BIN
patch-streamlit/favicon.ico
Normal file
BIN
patch-streamlit/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 159 KiB |
47
patch-streamlit/index.html
Normal file
47
patch-streamlit/index.html
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<!--
|
||||||
|
Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta
|
||||||
|
name="viewport"
|
||||||
|
content="width=device-width, initial-scale=1, shrink-to-fit=no"
|
||||||
|
/>
|
||||||
|
<link rel="shortcut icon" href="./favicon.ico" />
|
||||||
|
<link
|
||||||
|
rel="preload"
|
||||||
|
href="./static/media/SourceSansVF-Upright.ttf.BsWL4Kly.woff2"
|
||||||
|
as="font"
|
||||||
|
type="font/woff2"
|
||||||
|
crossorigin
|
||||||
|
/>
|
||||||
|
|
||||||
|
<title>tebarius Mysteryhelfer (web)</title>
|
||||||
|
|
||||||
|
<!-- initialize window.prerenderReady to false and then set to true in React app when app is ready for indexing -->
|
||||||
|
<script>
|
||||||
|
window.prerenderReady = false
|
||||||
|
</script>
|
||||||
|
<script type="module" crossorigin src="./static/js/index.BTGIlECR.js"></script>
|
||||||
|
<link rel="stylesheet" crossorigin href="./static/css/index.CJVRHjQZ.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
<div id="root"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user