Змінюй хід війни! Допомагай ЗСУ!

Деду Морозу нужна ваша помощь!

  • Автор теми Автор теми Dimoks
  • Дата створення Дата створення

Dimoks

Адмін
Статус: Офлайн
Реєстрація: 15.08.2003
Повідом.: 70814
Деду Морозу нужна ваша помощь!

У нас тут что-то типа игры
https://www.kharkovforum.com/showthread.php?t=2765372

Есть 62 анонимных Деда Мороза
список из ников
user1
...
user62

Нужно случайным образом "перелинковать" их, типа
user1 - user17
...
user17 - user6

Каждому дать адрес другого. Только чтобы не было взаимных пар (ты-мне, я-тебе)
И каждый был всего 1 раз конечно, а не одному два подарка, а другому ни одного :)

Как бы это сделать не руками, а то будут кричать "подтасовка" и т.д. и т.п.

простенький скрипт на пхп :rolleyes: или на чём угодно :нр:
 
Код:
#!/usr/bin/perl

use strict;
use warnings;

use List::Util qw(shuffle);
use Data::Dumper;

sub setLinks
{
    my (@users) = @_;

    my %user_link;
    @user_link{@users} = shuffle(@users);

    return setLinks(@users) if checkCollision(\%user_link);

    return \%user_link;
}

sub checkCollision
{
    my ($hash) = @_;

    foreach my $key (keys %$hash) {
        if ($key eq $hash->{$key}) {
            return 1;
        }
    }

    return 0;
}

my @users = (1..62);
my $user_link = setLinks(@users);

die '****!!!' if checkCollision($user_link);

print(Dumper($user_link));

Код:
{
          '9' => 35,
          '18' => 14,
          '5' => 15,
          '23' => 2,
          '38' => 43,
          '4' => 45,
          '36' => 18,
          '62' => 46,
          '51' => 36,
          '48' => 29,
          '32' => 34,
          '35' => 32,
          '54' => 6,
          '45' => 56,
          '61' => 12,
          '15' => 26,
          '58' => 44,
          '21' => 52,
          '43' => 27,
          '33' => 41,
          '44' => 50,
          '20' => 42,
          '2' => 53,
          '50' => 33,
          '3' => 10,
          '41' => 62,
          '42' => 4,
          '13' => 11,
          '24' => 55,
          '31' => 49,
          '28' => 24,
          '19' => 38,
          '6' => 39,
          '14' => 13,
          '46' => 57,
          '34' => 61,
          '39' => 9,
          '59' => 17,
          '26' => 5,
          '53' => 21,
          '10' => 16,
          '37' => 58,
          '29' => 48,
          '7' => 25,
          '52' => 3,
          '11' => 7,
          '55' => 1,
          '57' => 60,
          '49' => 40,
          '17' => 31,
          '47' => 8,
          '16' => 23,
          '30' => 59,
          '22' => 20,
          '25' => 47,
          '1' => 51,
          '56' => 30,
          '60' => 54,
          '12' => 22,
          '27' => 19,
          '40' => 37,
          '8' => 28
        }


Код:
{
          '60' => 48,
          '37' => 25,
          '50' => 57,
          '41' => 19,
          '26' => 27,
          '45' => 29,
          '11' => 32,
          '36' => 56,
          '24' => 2,
          '13' => 22,
          '30' => 15,
          '3' => 1,
          '18' => 33,
          '28' => 8,
          '44' => 5,
          '17' => 16,
          '27' => 38,
          '34' => 41,
          '52' => 45,
          '25' => 36,
          '40' => 30,
          '43' => 58,
          '61' => 24,
          '19' => 9,
          '46' => 50,
          '1' => 23,
          '16' => 12,
          '23' => 3,
          '32' => 21,
          '15' => 43,
          '49' => 39,
          '54' => 62,
          '8' => 28,
          '47' => 59,
          '29' => 34,
          '2' => 46,
          '58' => 52,
          '31' => 54,
          '59' => 7,
          '7' => 14,
          '53' => 40,
          '56' => 6,
          '39' => 17,
          '62' => 10,
          '33' => 60,
          '21' => 55,
          '35' => 4,
          '20' => 61,
          '38' => 13,
          '51' => 53,
          '55' => 51,
          '57' => 37,
          '12' => 20,
          '5' => 47,
          '14' => 49,
          '22' => 35,
          '9' => 42,
          '42' => 26,
          '48' => 11,
          '10' => 18,
          '4' => 31,
          '6' => 44
        }

ЗЫ: Димокс, глянь плиз репку.
 
Останнє редагування:
Спасибо! Возьмем первый вариант.

ЗЫ Удалил :)
 
Спасибо! Возьмем первый вариант.
Могу прогнать скрипт уже с никами.

Надеюсь не просто удалил ;)
Неадекватов нынче не банят?
Сорри за офф, но личка у тебя отключена, а жалобы на сообщения удаляются модераторами просто так без каких либо действий.

Код:
#!/usr/bin/perl

use strict;
use warnings;

use List::Util qw(shuffle);
use Data::Dumper;

sub setLinks
{
    my (@users) = @_;

    my %user_link;
    @user_link{@users} = shuffle(@users);

    return setLinks(@users) if checkCollision(\%user_link);

    return \%user_link;
}

sub checkCollision
{
    my ($hash) = @_;

    foreach my $key (keys %$hash) {
        if ($key eq $hash->{$key}) {
            return 1;
        }
    }

    return 0;
}

my @users = qw/
  username1
  username2
  username3
  username4
/;
my $user_link = setLinks(@users);

die '****!!!' if checkCollision($user_link);

print(Dumper($user_link));

Ники на реальные поменяй и сюда:
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
Останнє редагування:
Назад
Зверху Знизу