Re: [PHP] Re: Shuffle Cards Function
Well, I required a function to mimick a human shuffle. Because the online shuffle was to help the user predict what sort/types of deals he would get with a given deck based upon a normal human shuffle. Plus, I've heard some bad things about shuffle, and of course, shuffe doesn't mimick a non-perfect human shuffle. Robert Schultz - [EMAIL PROTECTED] - Original Message - From: "Tom Carter" <[EMAIL PROTECTED]> To: "Richard Lynch" <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> Sent: Sunday, August 19, 2001 7:00 PM Subject: Re: [PHP] Re: Shuffle Cards Function > I could be wrong in thinking this, but wasn't the purpose of the presented > function to shuffle a deck in a deliberately imperfecatly random way? ie. > mimicking a human shuffler beats why one would want to do this as an > academic excersize, but hey, I like it ;-) > - Original Message - > From: "Richard Lynch" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Sunday, August 19, 2001 9:45 PM > Subject: [PHP] Re: Shuffle Cards Function > > > > http://php.net/shuffle will be much faster and just as random... > > > > -- > > WARNING [EMAIL PROTECTED] address is an endangered species -- Use > > [EMAIL PROTECTED] > > Wanna help me out? Like Music? Buy a CD: http://l-i-e.com/artists.htm > > Volunteer a little time: http://chatmusic.com/volunteer.htm > > - Original Message - > > From: Robert Schultz <[EMAIL PROTECTED]> > > Newsgroups: php.general > > To: <[EMAIL PROTECTED]> > > Sent: Saturday, August 18, 2001 11:37 PM > > Subject: Shuffle Cards Function > > > > > > > I've written a ShuffleCards function that will actually shuffle a deck > of > > > cards just like would happen in real life (divide the deck in half and > > stick > > > them into each other with 1-3 cards between each other card) > > > > > >function ShuffleCards(&$cardsArray, $times) > > >{ > > > // Randomizes where to split within center (-3 to +3 from dead > center) > > > (MINIMUM 10 CARDS IN DECK) > > > // Splits into two array. Randomizes how many cards from left and > how > > > many cards from right (between 1 and 3) > > > // Alternates sides. Continues until both arrays are empty. > > > $arraySize = count($cardsArray); > > > > > > if($arraySize<10) > > > return; > > > > > > $deadCenter = $arraySize/2; > > > > > > for($i=0;$i<$times;$i++) > > > { > > > reset($cardsArray); > > > > > > $cutVariant = rand(-3, 3); > > > $cutLocation = $deadCenter+$cutVariant; > > > > > > $firstArray = array(); > > > $secondArray = array(); > > > > > > for($z=0;$z<$arraySize;$z++) > > > { > > > if($z<$cutLocation) > > >array_push($firstArray, $cardsArray[$z]); > > > else > > >array_push($secondArray, $cardsArray[$z]); > > > } > > > > > > $bottomFirst = rand(0, 1); > > > $cardsArray = array(); > > > > > > while(count($firstArray) && count($secondArray)) > > > { > > > $leftNewCards = array(); > > > $rightNewCards = array(); > > > > > > $leftVariant = rand(1, 3); > > > if($leftVariant>count($firstArray)) > > >$leftVariant = count($firstArray); > > > > > > $rightVariant = rand(1, 3); > > > if($rightVariant>count($secondArray)) > > >$rightVariant = count($secondArray); > > > > > > > > > for($x=0;$x<$leftVariant;$x++) > > > { > > >array_push($leftNewCards, array_shift($firstArray)); > > > } > > > > > > for($y=0;$y<$rightVariant;$y++) > > > { > > >array_push($rightNewCards, array_shift($secondArray)); > > > } > > > > > > if($bottomFirst==0) > > > { > > >$newCardsArray = array_merge($leftNewCards, $rightNewCards); > > >$bottomFirst = 1; > > > } > > > else > > > { > > >$newCardsArray = array_merge($rightNewCards, $leftNewCards); > > >$bottomFirst = 0; > > > } > > > > > > reset($newCardsArray); > > > > > > while(count($newCardsArray)) &
Re: [PHP] Re: Shuffle Cards Function
I could be wrong in thinking this, but wasn't the purpose of the presented function to shuffle a deck in a deliberately imperfecatly random way? ie. mimicking a human shuffler beats why one would want to do this as an academic excersize, but hey, I like it ;-) - Original Message - From: "Richard Lynch" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Sunday, August 19, 2001 9:45 PM Subject: [PHP] Re: Shuffle Cards Function > http://php.net/shuffle will be much faster and just as random... > > -- > WARNING [EMAIL PROTECTED] address is an endangered species -- Use > [EMAIL PROTECTED] > Wanna help me out? Like Music? Buy a CD: http://l-i-e.com/artists.htm > Volunteer a little time: http://chatmusic.com/volunteer.htm > - Original Message - > From: Robert Schultz <[EMAIL PROTECTED]> > Newsgroups: php.general > To: <[EMAIL PROTECTED]> > Sent: Saturday, August 18, 2001 11:37 PM > Subject: Shuffle Cards Function > > > > I've written a ShuffleCards function that will actually shuffle a deck of > > cards just like would happen in real life (divide the deck in half and > stick > > them into each other with 1-3 cards between each other card) > > > >function ShuffleCards(&$cardsArray, $times) > >{ > > // Randomizes where to split within center (-3 to +3 from dead center) > > (MINIMUM 10 CARDS IN DECK) > > // Splits into two array. Randomizes how many cards from left and how > > many cards from right (between 1 and 3) > > // Alternates sides. Continues until both arrays are empty. > > $arraySize = count($cardsArray); > > > > if($arraySize<10) > > return; > > > > $deadCenter = $arraySize/2; > > > > for($i=0;$i<$times;$i++) > > { > > reset($cardsArray); > > > > $cutVariant = rand(-3, 3); > > $cutLocation = $deadCenter+$cutVariant; > > > > $firstArray = array(); > > $secondArray = array(); > > > > for($z=0;$z<$arraySize;$z++) > > { > > if($z<$cutLocation) > >array_push($firstArray, $cardsArray[$z]); > > else > >array_push($secondArray, $cardsArray[$z]); > > } > > > > $bottomFirst = rand(0, 1); > > $cardsArray = array(); > > > > while(count($firstArray) && count($secondArray)) > > { > > $leftNewCards = array(); > > $rightNewCards = array(); > > > > $leftVariant = rand(1, 3); > > if($leftVariant>count($firstArray)) > >$leftVariant = count($firstArray); > > > > $rightVariant = rand(1, 3); > > if($rightVariant>count($secondArray)) > >$rightVariant = count($secondArray); > > > > > > for($x=0;$x<$leftVariant;$x++) > > { > >array_push($leftNewCards, array_shift($firstArray)); > > } > > > > for($y=0;$y<$rightVariant;$y++) > > { > >array_push($rightNewCards, array_shift($secondArray)); > > } > > > > if($bottomFirst==0) > > { > >$newCardsArray = array_merge($leftNewCards, $rightNewCards); > >$bottomFirst = 1; > > } > > else > > { > >$newCardsArray = array_merge($rightNewCards, $leftNewCards); > >$bottomFirst = 0; > > } > > > > reset($newCardsArray); > > > > while(count($newCardsArray)) > > { > >array_push($cardsArray, array_shift($newCardsArray)); > > } > > } > > > > if(count($firstArray)) > > { > > while(count($firstArray)) > >array_push($cardsArray, array_shift($firstArray)); > > } > > if(count($secondArray)) > > { > > while(count($secondArray)) > >array_push($cardsArray, array_shift($secondArray)); > > } > > } > >} > > > > Robert Schultz - [EMAIL PROTECTED] > > > > > > > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
[PHP] Re: Shuffle Cards Function
http://php.net/shuffle will be much faster and just as random... -- WARNING [EMAIL PROTECTED] address is an endangered species -- Use [EMAIL PROTECTED] Wanna help me out? Like Music? Buy a CD: http://l-i-e.com/artists.htm Volunteer a little time: http://chatmusic.com/volunteer.htm - Original Message - From: Robert Schultz <[EMAIL PROTECTED]> Newsgroups: php.general To: <[EMAIL PROTECTED]> Sent: Saturday, August 18, 2001 11:37 PM Subject: Shuffle Cards Function > I've written a ShuffleCards function that will actually shuffle a deck of > cards just like would happen in real life (divide the deck in half and stick > them into each other with 1-3 cards between each other card) > >function ShuffleCards(&$cardsArray, $times) >{ > // Randomizes where to split within center (-3 to +3 from dead center) > (MINIMUM 10 CARDS IN DECK) > // Splits into two array. Randomizes how many cards from left and how > many cards from right (between 1 and 3) > // Alternates sides. Continues until both arrays are empty. > $arraySize = count($cardsArray); > > if($arraySize<10) > return; > > $deadCenter = $arraySize/2; > > for($i=0;$i<$times;$i++) > { > reset($cardsArray); > > $cutVariant = rand(-3, 3); > $cutLocation = $deadCenter+$cutVariant; > > $firstArray = array(); > $secondArray = array(); > > for($z=0;$z<$arraySize;$z++) > { > if($z<$cutLocation) >array_push($firstArray, $cardsArray[$z]); > else >array_push($secondArray, $cardsArray[$z]); > } > > $bottomFirst = rand(0, 1); > $cardsArray = array(); > > while(count($firstArray) && count($secondArray)) > { > $leftNewCards = array(); > $rightNewCards = array(); > > $leftVariant = rand(1, 3); > if($leftVariant>count($firstArray)) >$leftVariant = count($firstArray); > > $rightVariant = rand(1, 3); > if($rightVariant>count($secondArray)) >$rightVariant = count($secondArray); > > > for($x=0;$x<$leftVariant;$x++) > { >array_push($leftNewCards, array_shift($firstArray)); > } > > for($y=0;$y<$rightVariant;$y++) > { >array_push($rightNewCards, array_shift($secondArray)); > } > > if($bottomFirst==0) > { >$newCardsArray = array_merge($leftNewCards, $rightNewCards); >$bottomFirst = 1; > } > else > { >$newCardsArray = array_merge($rightNewCards, $leftNewCards); >$bottomFirst = 0; > } > > reset($newCardsArray); > > while(count($newCardsArray)) > { >array_push($cardsArray, array_shift($newCardsArray)); > } > } > > if(count($firstArray)) > { > while(count($firstArray)) >array_push($cardsArray, array_shift($firstArray)); > } > if(count($secondArray)) > { > while(count($secondArray)) >array_push($cardsArray, array_shift($secondArray)); > } > } >} > > Robert Schultz - [EMAIL PROTECTED] > > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]