Just nu i M3-nätverket
Jump to content

Slumpa fram namn!


Dorkington

Recommended Posts

Hej

 

Jag vet inte om detta är rätt forum.

 

Men jag har 14 personer som jag skulle vilja slumpa fram dessa 14 delat 7 poster och på samma gång presentera två namn

 

dvs jag vill att resultatet vara enligt följande

 

1 X-X

2 X-X

3 X-X

4 X-X

5 X-X

6 X-X

7 X-X

Link to comment
Share on other sites

Nu tänker jag vara rätt sjysst och presentera hela lösningen, dock med kommentarer så du kan skapa dig en förståelse vad som görs och varför, så att du förhoppningsvis lär dig något :)

 

Jag har gjort lösningen i javascript vilket bara är att trycka in i en html-sida där du vill ha det presenterat.

 

 <script type="text/javascript">
var teams = new Array("Lag 1","Lag 2","Lag 3","Lag 4","Lag 5","Lag 6","Lag 7","Lag 8","Lag 9","Lag 10","Lag 11","Lag 12","Lag 13","Lag 14"); //Lista med lag. Kan vara hur många som helst.
var chosen = new Array(); //Lista som skall populeras med lag som redan slumpats ut

function IsInArray(a, //Funktion som kollar om slumpat lag redan finns i listan med slumpade lag
{
	var c=false,d;
	for(d=0;d<b.length;d++)
	{
		if(a==b[d])
		{
			c=true;
			break;
		}
	}
	return c;
}

var i,selTeam;
document.write("<ol><li>")
for (i=0;i<teams.length;i++)
{	
	selTeam = teams[Math.floor(Math.random()*teams.length)]; // Slumpa ett lag från listan
	if(IsInArray(selTeam,chosen)) //Kontroll om slumpat lag redan finns i listan med slumpade lag
	{
		i--; // Laget redan slumpat - Gör om loopen
	}
	else // Laget är inte slumpat sedan tidigare
	{
		chosen.push(selTeam); // Lägg till lag till listan över slumpade lag
		document.write(selTeam); // Skriv ut laget

		if(i<(teams.length-1))
		{
		document.write( (i%2==1) ? "</li><li>" : " - "); // Skriv ut streck eller radbryt beroende på vart loopen befinner sig
		}
		else{document.write( "</li>");} // På den sista i listan, skriv endast ut slut på listan
	}	
}
document.write("</ol>");
 </script>

 

Koden slumpar ut ett lag i den lista man lagt in de lag som skall slumpas mellan och kontrollerar så att varje nytt slumpat lag inte redan slumpats fram.

 

Det har inte tagits hänsyn till vidare serier; dvs vid nästa omgång om två lag redan möts och om de spelar hemma eller borta (Jag antar att det är någon form av matchserie du är ute efter.

 

Vilket fall - mycket nöje.

Link to comment
Share on other sites

Fick lite tråkigt så skulle testa Jonas script, men det fungerade inte. Felet ligger i att i funktionen IsInArray använder stort B när du startar funktionen men litet b när du försöker använda variabeln.

 

Dessutom, sannolikheten för att man skall fortsätta slumpa fram ett lag som redan är framslumpat väldigt många gånger i rad finns, även om den är väldigt liten att det skall ske så många gånger att man får problem med att scriptet hänger sig eller liknande.

 

Men man kan göra såhär också, det borde vara snabbare och effektivare. Det lär dock inte märkas förrän man har några hundra lag.

 

 

<script type="text/javascript">
var teams = new Array("Lag 1","Lag 2","Lag 3","Lag 4","Lag 5","Lag 6","Lag 7","Lag 8","Lag 9","Lag 10","Lag 11","Lag 12","Lag 13","Lag 14"); //Lista med lag. Kan vara hur många som helst.
var i=0;
var rand;
document.write("<ol><li>");
while(teams.length) {
	rand = Math.floor(Math.random()*(teams.length));  // Slumpa
	document.write(teams[rand]); // Skriv ut laget
	teams.splice(rand,1); // Ta bort framslumpat lag från array
	if(teams.length) { // Är det sista laget skall vi inte avsluta något
		if(i%2) {
			document.write("</li><li>"); // Radbrytning i listan om det är jämt
		} else {
			document.write(" - "); // Lagavskiljare
		}
		i++; // Bara för att veta hur många lag vi skrivit ut, för beräkningen ovan (i%2)
	}
       }
       document.write("</ol>");
</script>

Link to comment
Share on other sites

Det är eforum som lagt in ett versalt B, något fel där, men det är bra att du upplyser om.

test 1: (fungerade inte

function IsInArray(a, //Funktion som kollar om slumpat lag redan finns i listan med slumpade lag

 

test 2: (fungerar med ett mellanslag mellan "b" och parantesen

function IsInArray(a, b ) //Funktion som kollar om slumpat lag redan finns i listan med slumpade lag

 

 

 

Splice var en bra metod att använda för att ta bort ett lag ur arrayn, det saknas dock en avslutande </li> men det kan man skriva ut i samband med man stänger ol:n

Link to comment
Share on other sites

Det är eforum som lagt in ett versalt B

Jo Eforum har ju för sig lite skumma saker med versaler/gemener ibland :(

 

Splice var en bra metod att använda för att ta bort ett lag ur arrayn

Jo, lite rotande på w3schools.coms JavaScript-avdelning så hittade jag något passande, antog att det var tvunget att finnas :)

 

det saknas dock en avslutande </li> men det kan man skriva ut i samband med man stänger ol:n

Det stämmer, den försvann i samband med att jag blockade bort else-satsen till if(i%2), men glömde att peta in den på rätt ställe.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...