[REQ] Programm für zufällige Sitzordnung
D-Man 13.01.2014 - 19:14 3447 9
D-Man
knows about the word
|
Guten Abend zusammen, ich bin mir nicht sicher ob ich hier richtig bin, falls nicht bitte verschieben  Ich benötige ein kleines Programm, das mir für zehn Personen eine zufällige Sitzordnung ausspuckt. Vielleicht hat jemand soetwas ja eh rumliegen oder wäre bereit dazu, das "mal eben" (?) zu programmieren. Konkret geht es um unseren Kegelclub und es handelt sich immer um die selben Personen. Mir würde es schon reichen, wenn die Namen den Zahlen 1 bis 10 zugeordnet werden, benötige also nichts grafisches. Ich habe keine Ahnung wie groß der Aufwand für soetwas ist, deswegen halte ich meine Ansprüche gering. Die Extended Version wäre dann mit Gastkeglern, bzw. austauschbaren Namen und einer grafischen Ansicht, aber das hat wirklich keine Priorität! Vielen Dank schon mal falls sich jemand dazu berufen fühlen sollte  lG D-Man
|
wacht
pewpew
|
|
smashIt
master of disaster
|
|
D-Man
knows about the word
|
theoretisch ja  mir ist als war ich auf der seite, wieso hab ich das denn nicht gesehen  so muss ich nur mit nem überlappenden fenster die namen daneben setzen und fertig
|
Aeefire
Big d00d
|
mal im (java angelehnten)pseudocode, falls du doch noch selbst ein script o.ä. schreiben (lernen) willst: public void main(String[]args){
int numPlayers = 10;
Queue<Integer> playerQueue = new Queue<Integer>();
List<Integer> alreadyChosenSeats = new ArrayList<Integer>();
Random rand = new Random();
for(int i = 0; i < numPlayers; i++){
playerQueue.add(i);
}
while(!q.isEmpty()){
int newSeat;
do{
newSeat = rand.nextInt(numPlayers);
}while(alreadyChosenSeats.contains(newSeat));
alreadyChosenSeats.add(newSeat);
System.out.println("player "+q.pop()+" on seat: "+newSeat);
}
}
oder so ähnlich. Nur falls du interessiert sein solltest, sowas auch zu verstehen. gemacht wird nix anderes als eine Liste(eigentlich "Queue") mit den Spielern zu erstellen (jeder spieler bekommt eine nummer von 0 bis n-1) und eine mit den schon besetzten plätzen. Solang die Liste mit den Spielern nicht leer ist und der platz nicht besetzt, wird ein zufälliger platz zwischen 0 und n-1 ausgewählt. Das geht natürlich noch viel performanter (besonders um die vielen random aufrufe zu verhindern, wenn nurmehr wenige sitzplätze über sind usw.) aber das würde das ganze jetzt unnötig verkomplizieren  edit: worauf weiter hinten hingewiesen wird: algorithm à la that: Berechne eine zufällige Position zwischen diesem "Slot" und dem letzten (jeweils inklusive) und vertausche den Eintrag mit dem an der gewählten Position public void main(String[]args){
int numPlayers = 10;
Random rand = new Random();
int[] seat = new int[numPlayers];
for (int i = 0; i < seat.length; i++){
seat[i]= i; // array initialisieren mit den spielernummern
}
for (int i = 0; i < seat.length; i++){
int newPos = i + rand.nextInt(seat.length - i);
int temp = seat[newPos];
seat[newPos] = seat[i];
seat[i] = temp;
}
}
das Ding hat dann O(n) ..
Bearbeitet von Aeefire am 05.02.2014, 14:51
|
that
Hoffnungsloser Optimist
|
Das geht natürlich noch viel performanter (besonders um die vielen random aufrufe zu verhindern, wenn nurmehr wenige sitzplätze über sind usw.) aber das würde das ganze jetzt unnötig verkomplizieren  Nachdem ich diesen Unfug in jungen Jahren auch mal gemacht habe, würde ich eher zu einem Verfahren mit linearer Laufzeit raten, das sogar viel einfacher ist.  - Einmal von vorne bis hinten durchs Array gehen - Für jeden Eintrag: Berechne eine zufällige Position zwischen diesem "Slot" und dem letzten (jeweils inklusive) und vertausche den Eintrag mit dem an der gewählten Position - Fertig!
|
Aeefire
Big d00d
|
Nachdem ich diesen Unfug in jungen Jahren auch mal gemacht habe, würde ich eher zu einem Verfahren mit linearer Laufzeit raten, das sogar viel einfacher ist. 
- Einmal von vorne bis hinten durchs Array gehen - Für jeden Eintrag: Berechne eine zufällige Position zwischen diesem "Slot" und dem letzten (jeweils inklusive) und vertausche den Eintrag mit dem an der gewählten Position - Fertig! hab' ich garnicht dran gedacht. man fängt irgendwann an zu kompliziert zu denken ... brrrr...
|
D-Man
knows about the word
|
Also selber Programmieren wollte ich nicht, das hat mir früher schon nicht gelegen
|
Smut
takeover &amp; ether
|
|
that
Hoffnungsloser Optimist
|
ziemlich random  war jetzt sicher bei 5/10 versuchen die nummer 10 an 1. stelle - aber ja - für dein vorhaben reicht es sicher. Das haben Zufallszahlen halt so an sich (die behaupten ja, qualitativ hochwertige Zufallszahlen zu haben). Du wirst auch 10 Versuche machen können, wo die 10 nie an 1. Stelle steht.
|