Würfeln mit Armin

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Benutzeravatar
__blackjack__
User
Beiträge: 13129
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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()
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1638
Registriert: Samstag 16. April 2011, 12:47

Interessant. :) Kleiner Verbesserungsvorschlag: Der korrekte Fachbegriff für das grammatische Geschlecht ist Genus bzw. Gender. Sexus/Sex bzw. sich auf das biologische Geschlecht.
Benutzeravatar
__blackjack__
User
Beiträge: 13129
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kann ich jetzt leider nicht auf's Original schieben, denn da hiess die Funktion `mw()` und die Gruppe war nicht benannt, hiess also `$2`. 🙂
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten