regex-riddles/generate.py

208 lines
5.2 KiB
Python
Raw Normal View History

2024-05-17 19:42:50 +02:00
#!/usr/bin/python3
from random import randint, random, choice
from choice_network import Choice, FixedText, RandInt, Network
2024-06-03 13:35:05 +02:00
def get_names(filename, pad = " "):
2024-06-03 10:39:40 +02:00
lines = []
with open(filename) as file:
lines = file.read().split("\n")
names = [
2024-06-03 13:35:05 +02:00
name + pad
2024-06-03 10:39:40 +02:00
for name in lines
if len(name) > 1
]
return names
2024-05-17 19:42:50 +02:00
greeting = """
2024-06-03 14:17:41 +02:00
Re: AW: Studierendenabfrage
von: Prüfungsverwaltung
2024-06-03 10:39:53 +02:00
---------
2024-05-17 19:42:50 +02:00
Englisch version below.
Hallo,
2024-06-03 12:45:40 +02:00
Zur angefragten Prüfung gibt es leider noch keine Datenbank,
2024-06-03 14:17:41 +02:00
daher unten angefügt unsere Notizen aus Prüfungsakten und Personendatenbank,
immer mit automatisch erstellter englischer Überstzung.
2024-06-03 12:45:40 +02:00
Vielleicht können Sie die ja mit regulären Ausdrücken filtern.
Das funktioniert wie normale Text-Suche, nur etwas flexibler:
(Erst|Zweit)versuch z.B. würde sowohl 'Erstversuch'
als auch 'Zweitversuch' markieren.
2024-06-03 14:17:41 +02:00
.+ akzeptiert alle Zeichen, das können Sie an die 'Expression'
(oben auf der Seite) vorn anfügen,
2024-06-03 13:27:57 +02:00
um im Menü 'List' unten rechts den Anfang der Zeile zu sehen.
2024-06-03 14:17:41 +02:00
Sie sollten etwa 5 Studierende finden.
2024-05-17 19:42:50 +02:00
Viel Spaß
=== ENGLISCH VERSION ===
2024-06-03 12:45:40 +02:00
Hi,
2024-06-03 14:17:41 +02:00
there is no database for this exam, so I added our digitized notes below,
aloways with the auto-generated english translation.
2024-06-03 12:45:40 +02:00
Maybe you can filter it with regular expressions?
2024-06-03 13:02:12 +02:00
They are like normal text-search but more flexible:
2024-06-03 12:45:40 +02:00
E.g.: (Erst|Zweit)versuch would select both words:
'Erstversuch' (first attempt) and 'Zweitversuch' (second attempt).
2024-06-03 13:59:02 +02:00
.+ will accept any text, you can add it at the start of the expression
2024-06-03 14:17:41 +02:00
(top of page)
2024-06-03 13:59:02 +02:00
to see the whole line in the menu 'List' (bottom right).
2024-06-03 14:17:41 +02:00
You should find approximately 5 students.
Good Luck
2024-05-17 19:42:50 +02:00
"""
# fünf Tatverdächtige
# Uhrzeiten, siehe Infos von Verantwortlichen
# Groß-Klein-Schreibung
2024-06-03 11:41:53 +02:00
date = "05.06.2024"
2024-06-03 11:02:01 +02:00
hidden_data = [
"Anna Bartel: Zweitversuch nicht bestanden.\n"
"Anna Bartel: second attempt not passed.",
"Boris Parsch: Zweitversuch nicht bestanden.\n"
"Boris Parsch: second attempt not passed.",
"Charlotte Winter: 2. Versuch nicht bestanden.\n"
"Charlotte Winter: 2nd attempt not passed.",
"Dennis Meier: 2. Versuch nicht bestanden.\n"
"Dennis Meier: 2nd attempt not passed.",
"Elisa Menniz: Zweitversuch nicht bestanden.\n"
"Elisa Menniz: second attempt not passed.",
f"Anna Bartel: Prüfung am {date} um 13:00.\n"
f"Anna Bartel: exam on {date}, 13:00.",
f"Boris Parsch: Prüfung am {date} um 14:00.\n"
f"Boris Parsch: exam on {date}, 14:00.",
f"Charlotte Winter: Prüfung am {date} um 13:30.\n"
f"Charlotte Winter: exam on {date}, 13:30.",
f"Dennis Meier: Prüfung am {date} um 10:00.\n"
f"Dennis Meier: exam on {date}, 10:00.",
f"Elisa Menniz: Prüfung am {date} um 14:30.\n"
f"Elisa Menniz: exam on {date}, 14:30.",
f"Anna Bartel: blaue Augen.\n"
f"Anna Bartel: blue eyes.",
f"Boris Parsch: blaue Augen.\n"
f"Boris Parsch: blue eyes.",
f"Charlotte Winter: blaue Augen.\n"
f"Charlotte Winter: blue eyes.",
f"Dennis Meier: grüne Augen.\n"
f"Dennis Meier: green eyes.",
f"Elisa Menniz: grüne Augen.\n"
f"Elisa Menniz: green eyes.",
2024-06-03 11:02:01 +02:00
]
2024-05-17 19:42:50 +02:00
network = Network(
start = Choice(
2024-06-03 12:10:45 +02:00
student = [""],
),
student = Choice(
2024-06-02 21:27:26 +02:00
last_name = get_names("vornamen.csv"),
),
last_name = Choice(
2024-06-03 13:35:05 +02:00
student_mit = get_names("nachnamen.csv", pad = ""),
),
student_mit = Choice(
2024-06-03 12:17:12 +02:00
hat_den = [""],
),
2024-06-03 11:12:40 +02:00
hat_den = Choice(
2024-06-03 13:35:05 +02:00
versuch = [": ",],
2024-06-03 13:42:37 +02:00
prüfungszeit = [(f": Prüfung am {date} um ", f": exam on {date}, ")],
2024-06-03 13:35:05 +02:00
augenfarbe = [": ",],
2024-06-03 12:00:14 +02:00
),
augenfarbe = Choice(
2024-06-03 13:42:37 +02:00
augen = [
("grüne ", "green "),
("braune ", "brown "),
("blaue ", "blue "),
],
2024-06-03 12:00:14 +02:00
),
augen = FixedText(
2024-06-03 13:42:37 +02:00
stop = ("Augen.", "eyes."),
2024-06-03 11:12:40 +02:00
),
prüfungszeit = Choice(
uhr = [
"09:00",
"09:30",
"10:00",
"10:30",
"11:00",
"11:30",
"12:00",
"12:30",
"13:00",
"13:30",
"14:00",
"14:30",
"15:00",
"15:30",
],
),
uhr = FixedText(
2024-06-03 13:42:37 +02:00
stop = (" Uhr.", "."),
),
versuch = Choice(
2024-06-03 13:42:37 +02:00
nicht = [
("Erstversuch ", "first attempt "),
("1. Versuch ", "1st attempt "),
2024-06-03 13:42:37 +02:00
],
bestanden = [
("Erstversuch ", "first attempt "),
("1. Versuch ", "1st attempt "),
("Zweitversuch ", "second attempt "),
("2. Versuch ", "2nd attempt "),
2024-06-03 13:42:37 +02:00
],
),
nicht = Choice(
2024-06-03 13:42:37 +02:00
bestanden = [
("nicht ", "not "),
""
],
),
bestanden = FixedText(
2024-06-03 13:42:37 +02:00
stop = ("bestanden.", "passed."),
),
)
2024-06-03 11:02:01 +02:00
def pop_hidden_data():
global hidden_data
index = randint(0, len(hidden_data) - 1)
return hidden_data.pop(index)
def generate_text(number_of_lines = 200):
result = ""
2024-06-03 11:02:01 +02:00
for i in range(number_of_lines):
emissions, _ = network.choose()
german = ""
english = ""
for emission in emissions:
match emission:
case (ger, eng):
german += ger
english += eng
case both:
german += both
english += both
result += german + "\n"
result += english + "\n"
2024-06-03 11:02:01 +02:00
if random() < len(hidden_data) / (number_of_lines - i):
result += pop_hidden_data() + "\n"
return result
def read_template(filename = "./template.html"):
with open(filename, "r") as file:
return file.read()
def write_index(text, filename = "./deploy/index.html"):
with open(filename, "w") as file:
file.write(text)
def main():
template = read_template()
generated = generate_text()
2024-06-03 10:39:53 +02:00
generated = greeting + "\n" + generated
text = template.replace("<replace with text>", generated)
write_index(text)
if __name__ == "__main__":
main()