Quirinus Kuhlmanns „Der Wechsel menschlicher Sachen" (1671, aus den „Himmlischen Liebesküssen") ist eines der frühesten Beispiele kombinatorischer Dichtung. Kuhlmann, beeinflusst von Athanasius Kirchers „Ars magna sciendi" (1669), organisiert jede Verszeile als Spalte austauschbarer einsilbiger Wörter in semantischen Gegensatzpaaren: Alles ist im Wandel, Freude folgt auf Leid, Krieg auf Frieden.
Die Reimplementierung erweitert die Wortlisten um anachronistische Elemente — Weihnachtskitsch und moderne Waffen kollidieren mit barocker Metaphysik. Bei 12 Zeilen mit je 9–14 Optionen ergeben sich Milliarden möglicher Gedichtvarianten, die alle in Kuhlmanns abschließendem Couplet münden.
import random
zeile1 = ["Christbaum", "Jesus", "Esel", "Dreikönige",
"Maria", "Hirten", "Geschenke", "Kinderlachen",
"Lametta", "Tannenbaum", "Konfetti", "Plätzchen"]
zeile2 = ["Granate", "Pistole", "Gewehr", "Schützengraben",
"Hellebarde", "Axt", "Schwert", "Bogen", "Armbrust"]
zeile3 = ["Leid", "Pein", "Schmach", "Angst", "Krieg",
"Ach", "Kreuz", "Streit", "Hohn", "Schmerz",
"Qual", "Tück", "Schimpf", "Spott"]
zeile4 = ["Freud", "Zier", "Ehr", "Trost", "Sieg",
"Rat", "Nutz", "Fried", "Lohn", "Scherz",
"Ruh", "Glück", "Glimpf"]
zeile5 = ["Mond", "Glunst", "Rauch", "Gems", "Fisch",
"Gold", "Perl", "Baum", "Flamm", "Storch",
"Frosch", "Lamm", "Ochs", "Magen"]
zeile6 = ["Schein", "Stroh", "Dampf", "Berg", "Flut",
"Glut", "Schaum", "Frucht", "Asch", "Dach",
"Teich", "Feld", "Wies", "Brot"]
zeile7 = ["Schütz", "Mensch", "Fleiß", "Müh", "Kunst",
"Spiel", "Schiff", "Mund", "Prinz", "Rach",
"Sorg", "Geiz", "Treu", "Gott"]
zeile8 = ["Ziel", "Schlaf", "Preis", "Lob", "Gunst",
"Zank", "Port", "Kuß", "Thron", "Mord",
"Sarg", "Geld", "Hold"]
zeile9 = ["gut", "stark", "schwer", "recht", "lang",
"groß", "weiß", "eins", "ja", "Luft",
"Feur", "hoch", "weit"]
zeile10 = ["bös", "schwach", "leicht", "krumm", "breit",
"klein", "schwarz", "drei", "nein", "Erd",
"Flut", "tief", "nah"]
zeile11 = ["Mut", "Lieb", "klug", "Witz", "Geist",
"Seel", "Freund", "Lust", "Zier", "Ruhm",
"Fried", "Scherz", "Lob"]
zeile12 = ["Furcht", "Haß", "Trug", "Wein", "Fleisch",
"Leib", "Feind", "Weh", "Schmach", "Angst",
"Streit", "Schmerz", "Hohn"]
print(f"Auf {random.choice(zeile1)} und Ochs")
print(f"Folgt {random.choice(zeile2)} und Not.")
print(f"Auf {random.choice(zeile3)} als Spott")
print(f"Will {random.choice(zeile4)} stets tragen.\n")
print(f"Der {random.choice(zeile5)} und Magen")
print(f"Liebt {random.choice(zeile6)} und Brot.")
print(f"Der {random.choice(zeile7)} und Gott")
print(f"Sucht's {random.choice(zeile8)}.\n")
print(f"Was {random.choice(zeile9)} genennt")
print(f"Pflegt {random.choice(zeile10)} zu meiden.")
print(f"Auch {random.choice(zeile11)} muß scheiden\n")
print(f"Wo {random.choice(zeile12)} schon rennt.")
print(f"Alles wechselt; alles liebet;")
print(f"alles scheinet was zu hassen:")
print(f"Wer nur diesem nach wird denken;")
print(f"muß der Menschen Weisheit fassen.")
const ZEILEN = [
["Christbaum","Jesus","Esel","Dreikönige","Maria",
"Hirten","Geschenke","Kinderlachen","Lametta",
"Tannenbaum","Konfetti","Plätzchen"],
["Granate","Pistole","Gewehr","Schützengraben",
"Hellebarde","Axt","Schwert","Bogen","Armbrust"],
["Leid","Pein","Schmach","Angst","Krieg","Ach",
"Kreuz","Streit","Hohn","Schmerz","Qual",
"Tück","Schimpf","Spott"],
["Freud","Zier","Ehr","Trost","Sieg","Rat",
"Nutz","Fried","Lohn","Scherz","Ruh",
"Glück","Glimpf"],
["Mond","Glunst","Rauch","Gems","Fisch","Gold",
"Perl","Baum","Flamm","Storch","Frosch",
"Lamm","Ochs","Magen"],
["Schein","Stroh","Dampf","Berg","Flut","Glut",
"Schaum","Frucht","Asch","Dach","Teich",
"Feld","Wies","Brot"],
["Schütz","Mensch","Fleiß","Müh","Kunst","Spiel",
"Schiff","Mund","Prinz","Rach","Sorg",
"Geiz","Treu","Gott"],
["Ziel","Schlaf","Preis","Lob","Gunst","Zank",
"Port","Kuß","Thron","Mord","Sarg",
"Geld","Hold"],
["gut","stark","schwer","recht","lang","groß",
"weiß","eins","ja","Luft","Feur","hoch","weit"],
["bös","schwach","leicht","krumm","breit","klein",
"schwarz","drei","nein","Erd","Flut","tief","nah"],
["Mut","Lieb","klug","Witz","Geist","Seel",
"Freund","Lust","Zier","Ruhm","Fried",
"Scherz","Lob"],
["Furcht","Haß","Trug","Wein","Fleisch","Leib",
"Feind","Weh","Schmach","Angst","Streit",
"Schmerz","Hohn"]
];
const TEMPLATES = [
(w) => `Auf ${w} und Ochs`,
(w) => `Folgt ${w} und Not.`,
(w) => `Auf ${w} als Spott`,
(w) => `Will ${w} stets tragen.`,
(w) => `Der ${w} und Magen`,
(w) => `Liebt ${w} und Brot.`,
(w) => `Der ${w} und Gott`,
(w) => `Sucht's ${w}.`,
(w) => `Was ${w} genennt`,
(w) => `Pflegt ${w} zu meiden.`,
(w) => `Auch ${w} muß scheiden`,
(w) => `Wo ${w} schon rennt.`
];
const CODA = [
'Alles wechselt; alles liebet;',
'alles scheinet was zu hassen:',
'Wer nur diesem nach wird denken;',
'muß der Menschen Weisheit fassen.'
];
function pick(arr) {
return arr[Math.floor(Math.random() * arr.length)];
}
function generate() {
const lines = TEMPLATES.map((fn, i) => fn(pick(ZEILEN[i])));
return [...lines, '', ...CODA];
}