# Kombinationen mit 3 Würfeln



## Fischfrosch (27. Okt 2009)

Hallo ,

Ich habe eine Frage zu einer Aufgabe : 

Man hat 3 Würfel. Man muss mit Java (Kara) ein Programm schreiben um herraus zu finden wie viele Möglichkeiten es gibt. Das war ja kein Problem und war schnell geschrieben. 
Doch jetzt sollen wir alle doppelten Kombinationen herraus streichen z.B ( 123 = 321 =132)
Am Ende müssen nur die einzigartigen Kombinationen gezählt werden.
Doch ich weiß nicht wie ich auf dem bestehenden Programm weiter arbeiten muss. 

Ich hoffe ihr könnt mir helfen ^^


----------



## Landei (27. Okt 2009)

Wie wäre es, wenn du die einzelnen Werte in eine geeignete Datenstruktur (Liste oder Array) packst und sortierst?


----------



## Schandro (27. Okt 2009)

Pack alle Kombinationsmöglichkeiten in ein 
	
	
	
	





```
Set
```
 (z.b. 
	
	
	
	





```
HashSet
```
) und geb am Schluss 
	
	
	
	





```
Set#size()
```
 aus.

Die Frage ist halt, wie du die Kombinationsmöglichkeiten abspeichern willst. Das Object, in dem du jeweils eine Kombinationsmöglichkeit abspeicherst, muss aufjedenfall equals und hashCode für deine Zwecke richtig Implementiert haben...


----------



## Marco13 (28. Okt 2009)

Ja, da gibt's verschiedene Möglichkeiten. Sowas wie das "UnorderedCombinationIterable" von http://www.java-forum.org/codeschnipsel-u-projekte/81973-combinatorics.html ist eine, aber wenn du sowieso die komplette Menge erzeugst, kanns du's so machen, wie Schandro beschrieben hat.


----------



## Painii (28. Okt 2009)

Wär es nicht für ne eigene Implementierung auch richtig die Quersumme zu berechnen?


Ah, kurz überlegt, nein...
2, 2, 1 == 3, 1, 1 in der Quersumme.


----------



## Marco13 (28. Okt 2009)

Ja, hab' ich kurz überlegt, die man diesen Test (bzw. das Überschreiben von hashCode + equals) am günstigsten machen könnte... Am einfachsten wäre sicher, die Ergebnisse in einer List zu speichern und zu sortieren, und diese Lists dann in einem Set zu sammeln, aber ... effizient ist das sicher nicht...


----------



## Tharsonius (28. Okt 2009)

Wenn Du jede Würfelergebnisgruppe einheitlich speicherst, dann dürfte das einfacher sein, gleiche Ergebnisse zu filtern.

Wenn Du 1,2,3 würfelst speicherst Du 123.
Wenn Du 1,3,2 würfelst sortierst das ebenfalls nach dem niedrigsten zuerst und speicherst ebenfalls 123.

Wenn Du also bereits ein Programm hast, was Dir alle Würfelergebnisse ermittelt, dann würde ich einfach die Speicherung ändern und sortiert speichern.



Ansatz 2:
Du brauchst nicht mehr alle Gruppen erzeugen.

Die Innere Schleife beispielsweise könnte als Startwert den Wert der äußeren Schleife bekommen.
Wenn der erste Würfel bereits 1-4 generiert hat und mit 5 anfängt, dann braucht der zweite ja nicht bei 1 sonder für diesen Durchlauf erst ebenfalls bei 5 starten, weil 5,1 bereits ein doppel von 1,5 ist.
Bei 3 Schleifen startet die 2 mit dem aktuellen Wert der 1. und die dritte startet jeweils mit dem aktuellen Wert der zweiten Schleife.


----------

