rewrite brainfuck ook and add encoding for them

This commit is contained in:
2025-08-08 23:48:32 +02:00
parent b2adc2a73c
commit 9cda38d35e
3 changed files with 51 additions and 83 deletions

View File

@@ -272,11 +272,17 @@ def auswahl_verarbeiten():
elif "ADFGVX dekodieren" in auswahl: elif "ADFGVX dekodieren" in auswahl:
st.session_state.output_text = tools.adfgvx_dekodieren(text, additional_parameter) st.session_state.output_text = tools.adfgvx_dekodieren(text, additional_parameter)
st.session_state.map_data = None st.session_state.map_data = None
elif "Brainfuck-Interpreter" in auswahl: elif "Brainfuck -> Text" in auswahl:
st.session_state.output_text = tools.brainfuck_interpreter(text) st.session_state.output_text = tools.brainfuck_to_text(text)
st.session_state.map_data = None st.session_state.map_data = None
elif "Ook-Interpreter" in auswahl: elif "Text -> Brainfuck" in auswahl:
st.session_state.output_text = tools.ook_interpreter(text) 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 st.session_state.map_data = None
# Standardwerte im Session State initialisieren # Standardwerte im Session State initialisieren
@@ -375,8 +381,10 @@ option = st.sidebar.radio("hidden_label",
":green[ADFGX dekodieren]", ":green[ADFGX dekodieren]",
":green[ADFGVX kodieren]", ":green[ADFGVX kodieren]",
":green[ADFGVX dekodieren]", ":green[ADFGVX dekodieren]",
":green-badge[Brainfuck-Interpreter]", ":green-badge[Brainfuck -> Text]",
":green-badge[Ook-Interpreter]", ":green-badge[Text -> Brainfuck]",
":green-badge[Ook -> Text]",
":green-badge[Text -> Ook]",
), ),
key='option', key='option',
on_change=auswahl_verarbeiten, on_change=auswahl_verarbeiten,

View File

@@ -6,6 +6,7 @@ import hilfetexte
import pandas as pd import pandas as pd
from urllib.parse import unquote as urllib_parse_unquote # für nak-nak from urllib.parse import unquote as urllib_parse_unquote # für nak-nak
import binascii # für base64_ascii import binascii # für base64_ascii
import brainfuckery
def cesar_all(eingabetext): def cesar_all(eingabetext):
eingabetext = eingabetext.rstrip() 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}" ausgabetext += f":blue[dekodiert mit Variante 9-0,Z-A:] \n{klartext_90za}"
return ausgabetext return ausgabetext
def brainfuck_interpreter(eingabetext): def brainfuck_to_text(eingabetext):
eingabetext = eingabetext.rstrip() eingabetext = eingabetext.rstrip()
if eingabetext == "": if eingabetext == "":
return hilfetexte.brainfuck_interpreter return hilfetexte.brainfuck_interpreter
else: else:
# ein kleiner feiner Code von https://gist.github.com/kates/986792 return brainfuckery.Brainfuckery().interpret(eingabetext)
c = [0] * 300000
p = 0 def text_to_brainfuck(eingabetext):
loop = [] eingabetext = eingabetext.rstrip()
rv = [] if eingabetext == "":
ts = list(eingabetext) return hilfetexte.brainfuck_interpreter
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: else:
loop.append(i - 1) return brainfuckery.Brainfuckery().convert(eingabetext)
elif t == "]":
i = loop[-1]
i += 1
return "".join(rv)
def ook_to_text(eingabetext):
def ook_interpreter(eingabetext):
eingabetext = eingabetext.rstrip() eingabetext = eingabetext.rstrip()
if eingabetext == "": if eingabetext == "":
return hilfetexte.ook_interpreter return hilfetexte.ook_interpreter
else: else:
ookzeichen = [".", "!", "?"] ook_zeichen = [".", "!", "?"]
ooktext = "" ook_text = ""
for z in eingabetext: # erstmal Short-Ook draus machen for z in eingabetext: # erstmal Short-Ook draus machen
if z in ookzeichen: if z in ook_zeichen:
ooktext = ooktext + z ook_text = ook_text + z
ookbf = {"..": "+", "!!": "-", ".?": ">", "?.": "<", "!?": "[", "?!": "]", "!.": ".", ".!": ","} ook_bf_dict = {"..": "+", "!!": "-", ".?": ">", "?.": "<", "!?": "[", "?!": "]", "!.": ".", ".!": ","}
bftext = "" bf_text = ""
for o in range(0, len(ooktext), 2): # jetzt in Brainfuck umwandeln for o in range(0, len(ook_text), 2): # jetzt in Brainfuck umwandeln
ooz = ooktext[o:o + 2] ooz = ook_text[o:o + 2]
if ooz in ookbf: if ooz in ook_bf_dict:
bftext = bftext + ookbf[ooz] bf_text = bf_text + ook_bf_dict[ooz]
c = [0] * 300000 return brainfuckery.Brainfuckery().interpret(bf_text)
p = 0
loop = [] def text_to_ook(eingabetext):
rv = [] eingabetext = eingabetext.rstrip()
ts = list(bftext) if eingabetext == "":
li = len(ts) return hilfetexte.ook_interpreter
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: else:
loop.append(i - 1) bf_text = brainfuckery.Brainfuckery().convert(eingabetext)
elif t == "]": ook_bf_dict = {"..": "+", "!!": "-", ".?": ">", "?.": "<", "!?": "[", "?!": "]", "!.": ".", ".!": ","}
i = loop[-1] bf_ook_dict = {v: k for k, v in ook_bf_dict.items()}
i += 1 short_ook = ""
return "".join(rv) 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}"

Binary file not shown.