Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Cards mixing   Sergei Boytsov   18 Dec 2000 03:51:43 
 Cards mixing   Sergey Averichev   18 Dec 2000 15:17:48 
 Cards mixing   Maxim Y. Zinyakov   18 Dec 2000 17:42:00 
 Cards mixing   Sergey Averichev   19 Dec 2000 00:17:38 
 Re: Cards mixing   Ruslan Bondarev   18 Dec 2000 23:03:37 
 Re: Cards mixing   Artur Penttinen   21 Dec 2000 21:39:11 
 Cards mixing   Sergei Boytsov   18 Dec 2000 18:08:18 
 Cards mixing   Alexander Kostiuchenko   21 Jun 2001 06:09:06 
 Cards mixing   Marat Gizatullin   30 Dec 2000 18:52:21 
Архивное /ru.perl/27933a3e8a32.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional