RE: [PHP] Round robin script revisited..

2002-12-30 Thread Chad Day
Ok, after some more fiddling, I'm really close to getting this to work.

The script seems to correctly generate a schedule if an odd number of teams
are specified:

Given an array of 5 teams, A through E, the following pairs are generated:

Round 1 - A/E, B/D
Round 2 - D/E, A/C
Round 3 - C/D, B/E
Round 4 - B/C, A/D
Round 5 - A/B, C/E

Looks good.. each team gets a bye, each team plays each other.  With an even
number of teams however, some pairings are repeated, and I'm sure this is a
bug I created when translating the code from perl to PHP.  The PHP code I
have is below, the link to the perl source is
(http://www.perlmonks.org/index.pl?parent=90132title=Round%20Robin%20Schedu
linglastnode_id=90132displaytype=displaytype=superdocnode=Comment%20on),
and the set of pairings I get with 6 teams, A through F is below.

6 teams, A/F

Round 1 - A/E, B/D, C/F
Round 2 - F/D, A/C, B/E
Round 3 - E/C, F/B, A/D
Round 4 - D/B, E/A, F/C (dupe of round 1)
Round 5 - C/A, D/F, E/B (dupe of round 2)

PHP code:

?

$teamarray = array('A', 'B', 'C', 'D', 'E', 'F');

$num_teams = sizeof($teamarray);

$pivot = undef;
$even = 0;
$end_point_a = 0;
$end_point_b = $num_teams-1;

if($num_teams % 2 == 0) {
# $pivot = array_pop($teamarray);
#$pivot = $#teams;
#$pivot = $num_teams-;
$pivot = ($num_teams - 1);
$even = 1;
$end_point_b--;
}


# Create a list of the stripes of the polygon, the stripes will be
# pairs of indices into the array

$stripes = array();

# Assume that each element in the array is a vertex of the polygon
# and the vertices are listed in order, stripes are created

for ($x = 1; $x  (sizeof($teamarray) / 2); $x++) {
# for (1..int(($size-1)/2)) {
array_push($stripes, array($end_point_a, $end_point_b));
$end_point_a++;
$end_point_b--;
}

if ($even) {
array_push($stripes, array($end_point_a,  $pivot));
}

$games = array();
for ($x = 0; $x  ($num_teams - $even); $x++) {
$this_week = array();
for ($y = 0; $y  sizeof($stripes); $y++) {
$num1 = $stripes[$y][0];
$num2 = $stripes[$y][1];
array_push($this_week, $teamarray[$num1], $teamarray[$num2]);
}
array_push($games, $this_week);

# Now rotate the @teams array
# Save the last team as the pivot for the polygon
$last_team = array_pop($teamarray);
array_unshift($teamarray, $last_team);
//  echo pArray Order: ;
//  for ($z = 0; $z  sizeof($teamarray); $z++) {
//  echo $teamarray[$z];
//  }
/*  if ($even) {
array_push($teamarray, $last_team);
}
*/
}

// echo 'brbrbr';
print_r($games);

?

-Original Message-
From: Chad Day [mailto:[EMAIL PROTECTED]]
Sent: Monday, December 30, 2002 10:57 AM
To: php general
Subject: [PHP] Round robin script revisited..


I was trying to find a script to do round robin pairings for a sports
schedule generator..  I was able to come across one in Perl, and am in the
process of trying to convert it to PHP, but since my perl knowledge is a bit
(well, a lot) lacking, I was hoping someone could help..

Perl script:

http://www.perlmonks.org/index.pl?parent=90132title=Round%20Robin%20Schedul
inglastnode_id=90132displaytype=displaytype=superdocnode=Comment%20on


The part I'm having trouble with:

for(1..($size-$even))
{
my @this_week;
# push the weeks worth of games onto @games
foreach my $sched_ref (@stripes)
{
push (@this_week, [$teams[$sched_ref-[0]], $teams[$sched_ref-
+[1]]]);
}
push(@games, \@this_week);


I'm not sure how to rewrite that in PHP and be pushing the correct array
elements into the games array .. If anyone can help me out or point me in
the right direction, I'd appreciate it.

Thanks,
Chad


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php




RE: [PHP] Round robin script revisited..

2002-12-30 Thread Chad Day
Nevermind, I found the bug.

End of the code should be:

# Now rotate the @teams array
# Save the last team as the pivot for the polygon
if ($even) {
$last_team_save = array_pop($teamarray);
}
$last_team = array_pop($teamarray);
array_unshift($teamarray, $last_team);
if ($even) {
array_push($teamarray, $last_team_save);
}


Hope this helps anyone else who needs it.

Chad

-Original Message-
From: Chad Day [mailto:[EMAIL PROTECTED]]
Sent: Monday, December 30, 2002 2:03 PM
To: php general
Subject: RE: [PHP] Round robin script revisited..


Ok, after some more fiddling, I'm really close to getting this to work.

The script seems to correctly generate a schedule if an odd number of teams
are specified:

Given an array of 5 teams, A through E, the following pairs are generated:

Round 1 - A/E, B/D
Round 2 - D/E, A/C
Round 3 - C/D, B/E
Round 4 - B/C, A/D
Round 5 - A/B, C/E

Looks good.. each team gets a bye, each team plays each other.  With an even
number of teams however, some pairings are repeated, and I'm sure this is a
bug I created when translating the code from perl to PHP.  The PHP code I
have is below, the link to the perl source is
(http://www.perlmonks.org/index.pl?parent=90132title=Round%20Robin%20Schedu
linglastnode_id=90132displaytype=displaytype=superdocnode=Comment%20on),
and the set of pairings I get with 6 teams, A through F is below.

6 teams, A/F

Round 1 - A/E, B/D, C/F
Round 2 - F/D, A/C, B/E
Round 3 - E/C, F/B, A/D
Round 4 - D/B, E/A, F/C (dupe of round 1)
Round 5 - C/A, D/F, E/B (dupe of round 2)

PHP code:

?

$teamarray = array('A', 'B', 'C', 'D', 'E', 'F');

$num_teams = sizeof($teamarray);

$pivot = undef;
$even = 0;
$end_point_a = 0;
$end_point_b = $num_teams-1;

if($num_teams % 2 == 0) {
# $pivot = array_pop($teamarray);
#$pivot = $#teams;
#$pivot = $num_teams-;
$pivot = ($num_teams - 1);
$even = 1;
$end_point_b--;
}


# Create a list of the stripes of the polygon, the stripes will be
# pairs of indices into the array

$stripes = array();

# Assume that each element in the array is a vertex of the polygon
# and the vertices are listed in order, stripes are created

for ($x = 1; $x  (sizeof($teamarray) / 2); $x++) {
# for (1..int(($size-1)/2)) {
array_push($stripes, array($end_point_a, $end_point_b));
$end_point_a++;
$end_point_b--;
}

if ($even) {
array_push($stripes, array($end_point_a,  $pivot));
}

$games = array();
for ($x = 0; $x  ($num_teams - $even); $x++) {
$this_week = array();
for ($y = 0; $y  sizeof($stripes); $y++) {
$num1 = $stripes[$y][0];
$num2 = $stripes[$y][1];
array_push($this_week, $teamarray[$num1], $teamarray[$num2]);
}
array_push($games, $this_week);

# Now rotate the @teams array
# Save the last team as the pivot for the polygon
$last_team = array_pop($teamarray);
array_unshift($teamarray, $last_team);
//  echo pArray Order: ;
//  for ($z = 0; $z  sizeof($teamarray); $z++) {
//  echo $teamarray[$z];
//  }
/*  if ($even) {
array_push($teamarray, $last_team);
}
*/
}

// echo 'brbrbr';
print_r($games);

?

-Original Message-
From: Chad Day [mailto:[EMAIL PROTECTED]]
Sent: Monday, December 30, 2002 10:57 AM
To: php general
Subject: [PHP] Round robin script revisited..


I was trying to find a script to do round robin pairings for a sports
schedule generator..  I was able to come across one in Perl, and am in the
process of trying to convert it to PHP, but since my perl knowledge is a bit
(well, a lot) lacking, I was hoping someone could help..

Perl script:

http://www.perlmonks.org/index.pl?parent=90132title=Round%20Robin%20Schedul
inglastnode_id=90132displaytype=displaytype=superdocnode=Comment%20on


The part I'm having trouble with:

for(1..($size-$even))
{
my @this_week;
# push the weeks worth of games onto @games
foreach my $sched_ref (@stripes)
{
push (@this_week, [$teams[$sched_ref-[0]], $teams[$sched_ref-
+[1]]]);
}
push(@games, \@this_week);


I'm not sure how to rewrite that in PHP and be pushing the correct array
elements into the games array .. If anyone can help me out or point me in
the right direction, I'd appreciate it.

Thanks,
Chad


--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php