Für einen Computer-Gegner würde ich auf jeden Fall den Six-Guess Algorithm nehmen, ich denke niemand mag es, wenn der eigene Code immer so früh erraten werden würde
Ein Hinweis von mir vorab, ich würde Abstand davon nehmen einen Buchstaben bei der Erklärung einer festen Farbe zuzuordnen, also musst du auf jeden Fall in jeder Runde die Zuordnung immer neu festlegen. Da Fallen mir Stichworte wie Random oder Shuffle ein.
Dann generierst du die Liste, kategoriesortiert, innerhalb der Kategorie alphabetisch sortiert. Ich würde dazu 4 einzelne ArrayLists für die Kategorien und eine für die verbleibenden Lösungen wählen. Letztere baust du zusammen mit addAll() und kannst du später mit remove() bzw. removeAll() kürzen.
Dann nimmst du abcd. In folgenden 3 Fällen kannst du die Liste so stark kürzen, dass du mit dieser weiterabreiten kannst:
a) Alle schwarz --> Gewonnen
b) Alle schwarz/weiß oder weiß -->
- Kategorie 2, 3 und 4 werden entfernt
- alle Lösungen aus Kategorie 1 mit e oder f werden entfernt
- weiter mit dem ersten Eintrag der verbleibenden Liste welcher nach den Farbangaben möglich ist
c) Alle Leer -->
- Kategorie 1 wird entfernt
- alle Lösungen aus Kategorie 2, 3 und 4 werden entfernt, welche andere Buchstaben enthalten als e und f
- weiter mit dem ersten Eintrag der verbleibenden Liste welcher nach den Farbangaben möglich ist
d) mixed -->
- weiter mit bcde
Bei dem Punkt "weiter mit dem ersten Eintrag der verbleibenden Liste welcher nach den Farbangaben möglich ist" kann man sich sicher streiten, ob man alle nicht mehr möglichen Einzelnen Lösungen löscht und dann den ersten Eintrag nimmt, oder diese erstmal alle drin lässt und eben immer nur die Lösung überprüft, welche man gerade einfügen möchte. Aber ich denke die genannte Variante ist weitaus performanter.
Der Vorgang weiderholt sich insgesamt 4 mal, falls bei den ersten 3 Fälllen d auftreten sollte. Beim vierten Mal gibt es dann eine Fallunterscheidung anhand der ersten möglichen Lösung.
Näheres ist sicher in deinem guide beschrieben.
Hoffe es konnte dir eine Orientierung bieten.