John Porter wrote: > > Keith Calvert Ivey wrote: > > > > But I still don't think the method of distributing cards is > > right. Like Rick Delaney, you're going through one suit at a > > time and distributing each card to a random player. You've > > added a check to make sure you no player gets more than 13 > > cards, so the difference from a real deal is more subtle, but > > it's still there. > > Indeed, that approach is fundamentally flawed. I do not see how it "fundamentally" flawed. Admittedly, my answer was stupid since it doesn't come close to allowing a real game of bridge, but a simple loop around it should fix it. Expanding a bit: @s=qw/S H D C/; { @n=@x=(); for$s(@s){ $_='AKQJT98765432'; for$i(4,3,2,1){ my$c; s/./rand$i>1?$&:($c.=$&,$n[$i-1]++,"")/ge; ($j,$f)=$i%2?($i,"%15s:%s"):(2,"%s:%-25s"); $x[$j]{$s}.=sprintf$f,$s,$c } } redo if grep$_!=13,@n; } $,=$\="\n"; print@{$_}{@s}for@x; Now, this isn't an efficient algorithm, nor does it win at golf, but it seems accurate to me. The main chunk in the middle randomly distributes 52 cards across 4 hands. The redo line rejects all of those distributions where all the hands do not have 13 cards. -- Rick Delaney rick.delaney@home.com ==== Want to unsubscribe from Fun With Perl? Well, if you insist... ==== Send email to <fwp-request@technofile.org> with message _body_ ==== unsubscribe