PDA

View Full Version : سوال در مورد تبدیل متغییر های یک آرایه به رشته های بدون تکرار



thacker
یک شنبه 19 آذر 1396, 14:24 عصر
سلام.

ما یک آرایه ورودی داریم با تعداد دلخواه متغییر ...
مثل :

$input = array('A', 'B', 'C', 'D', 'E' ,'F');

حالا میخواهیم این متغییر ها رو در دسته های 4 تایی بدون تکرار قرار بدیم ...
خروجی مورد نظر :


A B C D
A B C E
A B C F
B C D E
B C D F
C D E F
A C D E
A C D F
A C E F
. . . . . . .
. . . . . . .
X X X X

کسی میدونه چیکار باید کرد ؟
‌ ‌

plague
یک شنبه 19 آذر 1396, 16:50 عصر
اینی که میگم تئوریه همش وممکنه اشتباه باشه محسابات فقط میخام مسیر رو نشونت بدم
اول در میاری که کلا چند حالت وجود داره که ترکیب 4 تایی بسازی با 6 حرف فکر میکنم 6*5*4*3= 360
بعد یه حلقه میسازی که چک کنه تا وقتی تعداد ترکیب ها به 360 تا نرسیده ترکیب های رندوم ایجاد کنه
شاید خیلی بهینه نباشه ولی احتمالا جواب میده !



$stack = ['A', 'B', 'C', 'D', 'E' ,'F'];
$output = [] ;

while(count($output) < 360 )
{
$random = $stack ;
shuffle($random);
unset($random[5]);
unset($random[4]);

$key = implode('' , $random);
if(isset($output[$key])) continue ;
$output[$key] = $random ;
}

var_dump($output);

thacker
یک شنبه 19 آذر 1396, 19:45 عصر
در واقع کاری که میخوام بکنم اینه که مثلا ما 16 تا تیم توی لیگ داریم . حالا میخوایم این 16 تا تیم رو توی گروه های 4 تایی دسته بندی کنیم .
خروجی ای که لازم دارم اینه که تمام حالت های 4 تایی که میشه داشت رو بکشم بیرون . و بدون تکرار باشه.

مثلا اگه توی یک گروه تیم های استقلال، پرسپولیس، سپاهان، فولاد افتادند دیگه گروهی که این 4 تا تیم با هم باشند رو خروجی نده مثلا سپاهان، پرسپولیس، استقلال، فولاد رو دیگه چاپ نکنه

plague
یک شنبه 19 آذر 1396, 20:32 عصر
اگه منظورت اینه که میخای 16 تیم رو بریزی تو گروه های 4 تایی به شکلی که تیم های تکراری تو گروه ها نباشه که نسبتا سادست
کافیه همه تیم ها رو بریزی توی یک آرایه بعد یکی یکی از توی آرایه مادر خارج کنی تیم ها رو بریزی تو دسته های 4 تایی



$teams = ['a','b','c','d','e','f','g' ,'h'];
$groups = [] ;
while(!empty($teams))
{
$this_group = [] ;
for($i = 0 ; $i<=3 ; $i ++ )
{
shuffle($teams);
$this_group []= array_shift($teams);
}

$groups[] = $this_group ;
}

echo '<pre>';
print_r($groups);
echo '</pre>';

thacker
یک شنبه 19 آذر 1396, 20:34 عصر
ممنون . آره توی این حالت ساده هست . من میخوام تمام گروه هایی که ممکنه بوجود بیاد رو خروجی بگیرم (بدون تکرار ) نه اینکه 2 تا گروه رندوم خروجی بگیرم.

plague
دوشنبه 20 آذر 1396, 01:35 صبح
همون اولی که گفتم جواب میده فقط کافیه قبلش محاسبه کنی همه حالت های ممکن رو دربیاری که چند تان