|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Ruslan Bondarev 2:4624/1.65 18 Dec 2000 23:03:37 To : Sergey Averichev Subject : Re: Cards mixing -------------------------------------------------------------------------------- Понедельник Декабрь 18 2000 14:17, Sergey Averichev -> Sergei Boytsov: SA> раздать. Если перл ниже 5.004 - не забыть перед перетасовкой SA> раскрутить генератор с.ч. SA> Может кто покороче сделает? Самому интересно. А можно я длиннее? (о: Автор просил раздачу на 4 игроков, а не просто перемешивание карт. Hижеперечисленное есть функция shuffle(players,cards) Где players - число игроков, cards - число карт в колоде. Hа выходе получаем список ссылок на массивы или Undef, если ошибка. В полученном списке поля от 0 до players-1 = ссылки на массив карт сданных игроку, последняя ссылка в списке - на массив оставшихся карт (прикуп) или на пустой список. Примерно такой код распечатает списки розданных карт 4 игрокам из колоды в 52 карты: for $rl_crds (shuffle(4,52)) { print "@$rl_crds \n"; } Если замечены баги - сообщите, подправлю. === Start of shuffle.pl === sub shuffle() { my $num_players = shift @_; my $num_cards = shift @_; my $cards_f_player; return damn("Non zero values in num_cards and num_players expected") unless ($num_players && $num_cards); $cards_f_player = int ($num_cards/$num_players); return damn("Num_cards expected to be greater than num_players") unless ($cards_f_player); my $prikup = $num_cards - $cards_f_player * $num_players; my $cards_t_give = $num_cards - $prikup; my @cards = (1..$num_cards); my @ret_obj; for (1..$num_players) { my @for_player; for (1..$cards_f_player) { push @for_player, splice(@cards, int(rand($#cards+1)), 1); } push @ret_obj, [@for_player]; } my @prikup; for (1..$prikup) { push @prikup, splice(@cards, int(rand($#cards+1)), 1); } @prikup = () unless ($prikup); push @ret_obj, [@prikup]; return @ret_obj; } sub damn() { my $msg = shift @_; warn ("!!! $msg\n\n"); return undef; } === End of shuffle.pl === ... bye. --- What can change the nature of a man?.. * Origin: (2:4624/1.65) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/27933a3e8a32.html, оценка из 5, голосов 10
|