Die Lösung dieser Aufgabe besteht aus zwei Programmen: Eines für den Producer und eines für die Consumer.

Die Consumer-Karas


Zuerst muss ein Consumer-Kara ein Kleeblatt suchen, weshalb er zufällig in der Welt umher wandert. In den Einstellungen muss dazu die Interpretation der endlichen Automaten auf "nicht-deterministisch" gestellt werden. Vor dem Betreten eines Kleeblatt-Blockes beansprucht ein Kara die Critical Section, damit nicht zwei Consumer-Karas gleichzeitig denselben Kleeblatt-Block zu ersetzen beginnnen.

Nach dem Betreten einer Kleeblatt-Reihe sucht der Kara das Ende des Blocks, weil es einfacher ist, die Kleeblätter von einem Ende her zu ersetzen. Nach dem Ersetzen muss der Kara den Block wieder verlassen. Nicht immer kann ein Kara den Block einfach am Ende verlassen, da dort ein anderer Kara den Weg blockieren könnte. Er muss also eine Stelle finden, wo er den Kleeblatt-Block verlassen kann. Wenn er den Block verlassen hat, muss er noch die Critical Section freigeben. Dann beginnt die Suche nach Kleeblättern von vorne...

Der Producer-Kara


Der Producer muss eine freie Stelle finden, wo er einen Kleeblatt-Block beginnen kann. Im Zustand "laufe" weiss er, dass das Feld hinter ihm frei ist (Schema oben, Bild ganz links). Ist das Feld vor ihm auch frei, so wechselt er mit einer gewissen Wahrscheinlichkeit in den Zustand "lege" (zweites Bild). Ist das Feld nicht frei, so weicht er durch eine Drehung aus und sucht weiter ein freies Feld.

Im Zustand "lege" überprüft der Kara die Felder links, rechts und vorne. Sind alle drei Felder frei, dann legt er das erste Kleeblatt (mittleres Bild). Nach jedem Schritt und drei weiteren freien Felder kann er ein weiteres Kleeblatt legen. Das tut er ebenfalls nur mit einer gewissen Wahrscheinlichkeit, andernfalls bricht er den aktuellen Block ab und geht wieder in den Zustand "laufe", um eine andere Stelle für eine weitere Reihe zu suchen.

Hinweis: Um zu vermeiden, dass ein Consumer-Kara mit dem Ersetzen eines eben erst begonnenen Blockes beginnt, wird der Zustand "lege" als Critical Section markiert.