rewrite brainfuck ook and add encoding for them
This commit is contained in:
20
app/app.py
20
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,
|
||||
|
||||
114
app/tools.py
114
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}"
|
||||
|
||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
Reference in New Issue
Block a user