Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > всевозможные варианты


Автор: DooZ 28.12.2010, 07:41
Здравствуйте
не могу сообразить как сделать, описываю задачу

есть 4 хеша (четыре это условно, на самом деле хешей больше) данных (можно массивы, не столь важно)
в каждом хеше есть список данных:

хеш1:
x1
x2

хеш2
z1
z2

хеш3
a1
a2

хеш4
b1
b2

задача перемешать данные из хешей, а именно получить варианты
данные из хеша1 и хеша2:
x1 z1
x1 z2
x2 z1
x2 z2

далее данные из хеша 1 и хеша 3
x1 a1
x1 a2
x2 a1
x2 a2

далее данные из хеша 1 и хеша 4
x1 b1
x1 b2
x2 b1
x2 b2

далее данные хеша 2 и хеша 3
далее данные хеша 2 и хеша 4
и т .д.
потом идут данные хеша 1 хеша 2 хеща 3
и т.д.

т.е. надо перемешать все возможные связки...
надеюсь понятно объяснил?

вообщем не соображу как это все написать =)

заране спасибо за помощь

Автор: dmitryk1 28.12.2010, 09:14
Ну у тебя хэши тоже в какой-то структуре, вот и делай два цикла.


хэши();
for (i=1)
{
for (j=i+1)
{
  перемешать(хэши(i),хэши(j));

}
}

и отдельной процедуркой перемешивай. Или внутри цикла прямо, третьим и четвёртым циклом. 

Давно не кодил, так что код - это нечто, просто продемонстрировать.

Автор: arto 28.12.2010, 11:00
# perl -MList::Permutor -le '$p = new List::Permutor (@ARGV); while (my @a = $p->next) { print "@a"; }' 1 2 3 
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

Автор: DooZ 28.12.2010, 18:51
Цитата(arto @ 28.12.2010,  11:00)
# perl -MList::Permutor -le '$p = new List::Permutor (@ARGV); while (my @a = $p->next) { print "@a"; }' 1 2 3 
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
#

спасибо за ответы, но немного не ясвно, а варианты
1 2
1 3
2 3
1
2
3

?

Автор: DooZ 28.12.2010, 19:16
не то...

Автор: DooZ 28.12.2010, 23:06
не актуально...
вопрос решен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)