Seite 1 von 1

Würfeln mit Armin

Verfasst: Mittwoch 28. April 2021, 17:05
von __blackjack__
In de.comp.os.unix.programming (jaaa, Usenet gibt's noch) hat jemand einen Algorithmus den er auf Facebook gefunden hat, in Perl umgesetzt, den ich mal nach Python portiert habe. Das Programm spuckt Laschet-Aussagen zu Corona aus, wie „Was wir jetzt brauchen ist eine sechsmalige optionale Impfmatrix bis zur Bundestagswahl zur sofortigen Beschönigung der dritten Welle.“ oder „Was wir jetzt brauchen ist eine zweiwöchige softe Brückenmaßnahme bis nach den Abiturprüfungen zur willkürlichen Steigerung der Wahlprognosen.“

Code: Alles auswählen

#!/usr/bin/env python3
import random
import re

STEPS = [
    ["Was wir jetzt brauchen ist ein/e"],
    ["ein-", "zwei-", "drei-", "vier-", "fünf-", "sechs-"],
    ["tägige/r", "wöchige/r", "monatige/r", "fache/r", "malige/r", "hebige/r"],
    [
        "harte/r",
        "softe/r",
        "optionale/r",
        "intransparente/r",
        "alternativelose/r",
        "unumkehrbare/r",
    ],
    ["Wellenbrecher-", "Brücken-", "Treppen-", "Wende-", "Impf-", "Ehren-"],
    [
        "Lockdown:m",
        "Stopp:m",
        "Maßnahme:w",
        "Kampagne:w",
        "Sprint:m",
        "Matrix:w",
    ],
    ["bis"],
    [
        "zum Sommer",
        "auf Weiteres",
        "zur Bundestagswahl",
        "2030",
        "nach den Abiturprüfungen",
        "in die Puppen",
    ],
    ["zur"],
    [
        "sofortigen",
        "nachhaltigen",
        "allmählichen",
        "unausweichlichen",
        "wirtschaftsschonenden",
        "willkürlichen",
    ],
    [
        "Senkung",
        "Steigerung",
        "Beendigung",
        "Halbierung",
        "Vernichtung",
        "Beschönigung",
    ],
    ["der"],
    [
        "Infektionszahlen",
        "privaten Treffen",
        "Wirtschaftsleistung",
        "Wahlprognosen",
        "dritten Welle",
        "Bundesklanzlerin",
    ],
]


def concat(parts):
    previous_part = ""
    for part in parts:
        if part.endswith("-"):
            previous_part += part[:-1]
        else:
            if previous_part:
                part = previous_part + part.lower()
            yield part
            previous_part = ""


def fixup_sex(parts):
    result = []
    indices_to_fix = []
    for part in parts:
        if re.search(r"\/[er]$", part):
            indices_to_fix.append(len(result))
        else:
            match = re.fullmatch(r"(?P<part>.+):(?P<sex>[mw])", part)
            if match:
                part = match["part"]
                keep = {"m": "r", "w": "e"}[match["sex"]]
                for index in indices_to_fix:
                    part_to_fix = result[index]
                    result[index] = part_to_fix[:-2] + (
                        keep if part_to_fix.endswith(keep) else ""
                    )
                indices_to_fix = []

        result.append(part)

    return result


def main():
    print(" ".join(fixup_sex(concat(map(random.choice, STEPS)))), end=".\n")


if __name__ == "__main__":
    main()

Re: Würfeln mit Armin

Verfasst: Mittwoch 28. April 2021, 17:59
von nezzcarth
Interessant. :) Kleiner Verbesserungsvorschlag: Der korrekte Fachbegriff für das grammatische Geschlecht ist Genus bzw. Gender. Sexus/Sex bzw. sich auf das biologische Geschlecht.

Re: Würfeln mit Armin

Verfasst: Mittwoch 28. April 2021, 18:35
von __blackjack__
Kann ich jetzt leider nicht auf's Original schieben, denn da hiess die Funktion `mw()` und die Gruppe war nicht benannt, hiess also `$2`. 🙂