regex-riddles/generate.py
2024-06-03 11:12:40 +02:00

148 lines
3.5 KiB
Python
Executable file

#!/usr/bin/python3
from random import randint, random, choice
from choice_network import Choice, FixedText, RandInt, Network
def get_names(filename):
lines = []
with open(filename) as file:
lines = file.read().split("\n")
names = [
name + " "
for name in lines
if len(name) > 1
]
return names
greeting = """
Re: AW: Exmatrikulationsgefährdete Studierende
---------
Englisch version below.
Hallo,
Sie hatten ja um eine Liste der aktuell exmatrikulationsgefährdeten Studierenden gebeten.
In der Datenbank sind zwei auf die weiteren Kriterien treffende Studierende zu finden,
leider gibt es aber noch einen großen Bestand an nicht korrekt eingepflegten Prüfungsakten,
die wir Ihnen zwar digital, aber nicht in einem einheitlichen Format zur Verfügung stellen können.
Vielleicht können Sie den ja mit regulären Ausdrücken filtern.
Viel Spaß
=== ENGLISCH VERSION ===
Hi, we have two students matching the criteria from the database and a certain amount of unstructured data.
Maybe you can filter it with regular expressions? Good luck.
"""
# fünf Tatverdächtige
# Uhrzeiten, siehe Infos von Verantwortlichen
# Groß-Klein-Schreibung
hidden_data = [
"Anna Bartel hat den Zweitversuch nicht bestanden.",
"Student Boris Parsch mit Matrikelnummer hat den Zweitversuch nicht bestanden.",
"Studentin Carola Winter mit Matrikel-Nr. 4940456 hat den 2. Versuch nicht bestanden.",
"Student:in Dennis Meier hat den 2. Versuch nicht bestanden.",
"Elisa Menniz mit MatrNr. 5143424 hat den Zweitversuch nicht bestanden.",
]
network = Network(
start = Choice(
student = ["Student ", "Studentin ", "", "Studierende:r "],
),
student = Choice(
last_name = get_names("vornamen.csv"),
matr_nr = [""],
),
last_name = Choice(
student_mit = get_names("nachnamen.csv"),
),
student_mit = Choice(
matr_nr = ["mit "],
),
matr_nr = Choice(
matr_number = ["Matrikelnummer ", "Matrikel-Nummer ", "MatrNr. ", "Matrikel-Nr. "],
),
matr_number = RandInt(
hat_den = [
40_000_000,
55_000_000,
],
),
hat_den = Choice(
versuch = ["hat den ",],
prüfungszeit = ["schreibt am 05.06. um ",],
),
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(
prüfungsart = " Uhr die ",
),
prüfungsart = Choice(
prüfung = ["schriftliche ", "mündliche "],
),
prüfung = FixedText(
stop = "Prüfung.",
),
versuch = Choice(
nicht = ["Erstversuch ", "1. Versuch "],
bestanden = ["Zweitversuch ", "2. Versuch "],
),
nicht = Choice(
bestanden = ["nicht ", ""],
),
bestanden = FixedText(
stop = "bestanden.",
),
)
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 = ""
for i in range(number_of_lines):
emissions, _ = network.choose()
line = ''.join(emissions)
result += line + "\n"
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()
generated = greeting + "\n" + generated
text = template.replace("<replace with text>", generated)
write_index(text)
if __name__ == "__main__":
main()