Paarungsgenerator in PHP

20
Apr
2015

Im Contao-Forum erreichte mich eine Anfrage nach dem Paarungsgenerator, auf den ich in einem meiner Contao-Videos auf YouTube hinweise. Der Quellcode stammt ursprünglich vom Berliner Turnierleiter für die Mannschaftskämpfe des Berliner Schachverbandes, Benjamin Dauth.

Der Paarungsgenerator generiert dabei Paarungen entsprechend den Vorgaben der Weltschachorganisation FIDE. Online solche Paarungstabellen generieren lassen, kann man sich z.B. hier.

Und hier nun die entsprechende PHP-Funktion:

/***********************
 * liefert die Paarungen nach Standardsystem
 * @param dim: Spieleranzahl
 * @param runde: aktuelle Runde
 */
protected function Standardsystem($dim, $runde)
{
	// Spieleranzahl begradigen
	if($dim % 2 != 0)
	{
		$dim++;
		$spielfrei = $dim;
	}
	else $spielfrei = false;
	
	$gegner = range(1, $dim);
	if($runde % 2){
		$gegner[0] = $odd = ($runde+1)/2;
		$gegner[1] = $dim;
	}
	else{
		$gegner[0] = $dim;
		$gegner[1] = $odd = ($runde+$dim)/2;
	}
	for ($i=2; $i< $dim;){
		$gegner[$i++]= ($odd++)%($dim-1)+1;
		$gegner[$i++]= ($runde-$odd+$dim-1)%($dim-1)+1;
	}

	$i = 0;
	for($x = 0; $x < $dim-1; $x+=2)
	{
		if($spielfrei && ($gegner[$x] == $dim || $gegner[$x+1] == $dim))
		{
			// Spielfrei erwischt
		}
		else
		{
			$paarung[$i]['w'] = $gegner[$x];
			$paarung[$i]['s'] = $gegner[$x+1];
			$i++;
		}
	}
	
	return $paarung;
}

Die damit ermittelten Paarungen können natürlich auch für jede andere Sportart verwendet werden. Mitunter tauschen die Veranstalter allerdings auch Runden gegeneinander aus. Im Prinzip sollte dies aber bereits durch eine entsprechend intelligente Vergabe der Startnummern geschehen, um einen Rundentausch zu vermeiden.

Datum: | Autor: Frank Hoppe

Zurück

Einen Kommentar schreiben

Alle Rechte vorbehalten © 2011 - 2017 - Frank Hoppe
Das Layout basiert auf dem Baltimore-Theme von John Schop
Administration