Grundlagen

Ein combgen-Script besteht aus drei Bereichen:

  1. Parameter-Zuweisungen
  2. Deklaration von Datenfeldern
  3. Kombinatorischer Ausdruck

Die Parameter-Zuweisung kann entfallen, wenn es keine Parameter gibt, die für das Script gesetzt sein müssen. Dies ist zzt. sogar der Normalfall, denn im Programmcode ist zwar die Möglichkeit für Parameter vorgesehen, aber diese werden kaum eingesetzt. Es muss mindestens ein Datenfeld deklariert sein. Die maximale Anzahl an Datenfeldern ist beliebig und typischerweise zwischen 3 bis 40. Der kombinatorische Ausdruck ist im Enumerationsmodus obligatorisch, nicht jedoch beim Erzeugen einer Kodierungstabelle, wo er ignoriert wird.

Jeder Aufruf von combgen erfordert den Dateinamen von genau einer combgen-Quelltextdatei (Ausnahme --help). Außerdem muss ein Modus, wie das combgen arbeiten soll, gesetzt werden.

combgen hat folgende Kommandozeilen-Optionen:

Die Modi c und e können kombiniert werden; dann trägt jede aufgelistete Kombination die zugehörige Ordnungszahl (count-enumerate bzw. -ce oder -ec). Ferner existiert die Option --help, um eine Kurzreferenz zur Nutzung von combgen anzuzeigen.

Ein minimales Beispiel

Dieses combgen-Script gibt eine einfache Liste von Kombinationen aus. Es werden zwei Datenfelder für den Personennamen und die Stadt, in der die jeweilige Person wohnt, ausgegeben.

$person_name = {"Alice", "Bob", "Carol", "David", "Evelyn"};
$city = {"Amsterdam", "Berlin", "Chicago", "Den Haag"};

< $person_name . " wohnt in " . $city . "." >

Dies ergibt 20 Kombinationen, da die Zahl der Einträge in den einzelnen Datenfeldern (5 Personen und 4 Orte) multiplikativ zueinander stehen. Der Aufruf im Enumerationsmodus ergibt daher:

Alice wohnt in Amsterdam.
Alice wohnt in Berlin.
Alice wohnt in Chicago.
Alice wohnt in Den Haag.
Bob wohnt in Amsterdam.
Bob wohnt in Berlin.
Bob wohnt in Chicago.
Bob wohnt in Den Haag.
Carol wohnt in Amsterdam.
Carol wohnt in Berlin.
Carol wohnt in Chicago.
Carol wohnt in Den Haag.
David wohnt in Amsterdam.
David wohnt in Berlin.
David wohnt in Chicago.
David wohnt in Den Haag.
Evelyn wohnt in Amsterdam.
Evelyn wohnt in Berlin.
Evelyn wohnt in Chicago.
Evelyn wohnt in Den Haag.

Im Modus -t zur Erzeugung einer Kodierungstabelle ist die Ausgabe (hier ohne Boilerplate-Code, um es in das HTML dieser Seite einzubetten):

Range: 0 to 19

person_nameCode
Alice0
Bob4
Carol8
David12
Evelyn16
cityCode
Amsterdam0
Berlin1
Chicago2
Den Haag3

Wollen wir beispielsweise "David wohnt in Berlin" in die zugehörige Ordnungszahl umrechnen, suchen wir die Einträge für David und Berlin, die da sind 12 und 1. Diese addieren (nicht multiplizieren!) wir und stellen fest, dass die Ordnungszahl 13 ist. Und tatsächlich ist "David wohnt in Berlin" der 14. Eintrag in der Liste (die Ordnungszahlen beginnen bei Null). Die Ausgabe im Modus -ce (hier nur Auszugsweise) bestätigt das:

 9: Carol wohnt in Berlin.
10: Carol wohnt in Chicago.
11: Carol wohnt in Den Haag.
12: David wohnt in Amsterdam.
13: David wohnt in Berlin.
14: David wohnt in Chicago.
15: David wohnt in Den Haag.

Soll dagegen eine Ordnungszahl in eine Kombination umgewandelt werden, so erfolgt dies, indem aus jeder Tabelle in absteigender Reihenfolge derjenige Eintrag gesucht wird, dessen Code kleiner oder gleich der gegebenen Zahl ist. Der Code wird dann abgezogen und der jeweilige Eintrag notiert. In der letzten Tabelle ist die Ordnungszahl unmittelbar gleich dem Code.

Soll etwa die gegebene Ordnungszahl 7 in eine Kombination gewandelt werden, gilt folgender Rechenweg:

  1. Die erste Tabelle ist person_name. Darin wird der Eintrag mit dem größten Code kleiner-gleich 7 gesucht. Dieser ist Bob mit dem Code 4.
  2. Von der 7 wird 4 subtrahiert. Es bleibt 3 und die nächste (und letzte) Tabelle city wird betrachtet.
  3. Da es sich um die letzte Tabelle handelt, kann die Ordnungszahl direkt auf den Code abgebildet werden. Der Eintrag ist Den Haag.
  4. Die Ordnungszahl 7 steht also für "Bob wohnt in Den Haag"