PDA

View Full Version : سوال: نحوه لیگ بندی !!!



thacker
پنج شنبه 07 دی 1391, 12:03 عصر
سلام ...
من میخوام مثلا اسم 16 تیم رو به برنامه بدم ، بعد برنامه برای این 16 تیم برنامه بازیهاشون رو بچینه ...
یعنی مثلا تیم 1 با 2 ، 3 با 4 ، .... ، 15 با 16 ... 2 با 3 ، 4 با 5 ، ... ، 16 با 1 ... جوری که همه تیم ها یک بار با هم بازی داشته باشن ....
آیا با PHP میشه این کار رو کرد ؟؟؟
ممنون

mamali-mohammad
پنج شنبه 07 دی 1391, 12:57 عصر
بله میشه
خیلی ساده میتونی بزاری توی آرایه و با یه foreach این لیگ رو بچینی

thacker
پنج شنبه 07 دی 1391, 13:14 عصر
من تا حدودی کار با آرایه ها رو بلدم اما نمیدونم واسه این مورد چطور باید ازش استفاده کنم ...
میشه یکم راهنمایی کنید ؟؟
در ضمن میخوام که بازی تکراری هم نداشته باشه ...
با تشکر ...

Unique
پنج شنبه 07 دی 1391, 14:43 عصر
کافیه اسامی را بریزی توی آرایه بعد با دو تا for تو در تو بازیها را بچینی اما :

اگه بازیها براشون میهمان و میزبان مهم نیست و کافیه یکبار انجام بشن باید اندیس for تویی یکی بزرگتر از اندیس for بیرونی باشه ! چون بازی یکبار برای بیرونی ها و خودش ثبت شدند !

اگه بازیها رفت و برگشته هم که اصلا مهم نیست اندیس دوم هم از 1 شروع میشه و میهمان و میزبان ها جدا جدا ثبت میشه !

thacker
پنج شنبه 07 دی 1391, 14:49 عصر
اگه ممکنه یک نمونه کد بزارید ... ممنون

Unique
پنج شنبه 07 دی 1391, 19:36 عصر
بفرمائین :


$clubs[] = "Sepahan";
$clubs[] = "Zob Ahan";
$clubs[] = "Esteghlal";
$clubs[] = "Foolad";
$clubs[] = "Malavan";
$clubs[] = "Pas Tehran";
$clubs[] = "Naft Tehran";
$clubs[] = "Saba Batri";
$clubs[] = "Gahar Dorood";
$clubs[] = "Ararat";
$clubs[] = "Keshavarz";
$clubs[] = "Sanat Naft";

shuffle($clubs);

echo "<b>[without return match]</b><br>";
for($i=0;$i<count($clubs);$i++)
for($j=$i+1;$j<count($clubs);$j++)
echo "&nbsp;&nbsp;&nbsp;".$clubs[$i]." - ".$clubs[$j]."<br>";


echo "<br><br><b>[with return match]</b><br>";
for($i=0;$i<count($clubs);$i++)
for($j=0;$j<count($clubs);$j++)
if ($clubs[$i] != $clubs[$j])
echo "&nbsp;&nbsp;&nbsp;".$clubs[$i]." - ".$clubs[$j]."<br>";

thacker
جمعه 08 دی 1391, 15:34 عصر
آقا دمت گرررررررررررررررررررم ... کارمو راه انداختی ... خیلی تشکر ... :قلب:

فقط یه سوال دیگه ...
این کد خروجیش به این صورت هست :

تیم 1 - تیم 2
تیم 1 - تیم 4
تیم 1 - تیم 3
تیم 3 - تیم 2
تیم 3 - تیم 4
تیم 4 - تیم 2

حالا چطور میتونم کاری کنم که خروجی بصورت زیر بشه :

تیم 1 - تیم 3
تیم 2 - تیم 4
---------------
تیم 1 - تیم 2
تیم 3 - تیم 4
--------------
تیم 4 - تیم 1
تیم 3 - تیم 2

thacker
یک شنبه 10 دی 1391, 02:01 صبح
یکی کمک کنه... هر کاری میکنم درست نمیشه :ناراحت:

reza10wert
یک شنبه 10 دی 1391, 08:41 صبح
یه شمارشگر معرفی کن و توی حلقه یه شرط بذار که وقتی مثلا شمارشگر 2 شد این خط را بکشه

thacker
یک شنبه 10 دی 1391, 11:42 صبح
تشکر ... درست متوجه نشدم :خجالت:

colors
یک شنبه 10 دی 1391, 11:56 صبح
یه شمارشگر معرفی کن و توی حلقه یه شرط بذار که وقتی مثلا شمارشگر 2 شد این خط را بکشه

نه منظورش این نیست. میخوان تو هر هفته همه تیمها یک بازی داشته و در طول چند هفته هر تیمی با تمام تیمهای حریف بازی داشته باشه. دوره ای

A - B - C - D


A : B
c : D
-----
A : C
B : D
-----
A : D
B : C
:متفکر:

Unique
دوشنبه 11 دی 1391, 07:52 صبح
خوب ! دو روز بود یکی دو ساعت وقت میگذاشتم و فکر میکردم خیلی الگوریتم ساده ای هست اینی که دوستمون میخواد ! خدایی اصلا ساده نیست و 99% مطمئن هستم کسی هم مثل منه دیوونه نرفته چک کنه ، حلاصه هر کاری میکردم و هر الگوریتمی مینوشتم یه جایئش ایراد داشت و تازه اگه تعداد تیم ها فرد میشد داستان تغییر میکرد ! بعضی وقت ها یه مسائلی خیلی ساده به ذهن میاد اما موقع اجرا اصلا اینطور نیست ، شاید ما بتونیم با مغزمون آنالیز راحتی بکنیم و دستی بچینیم اما وقتی میخوای به کامپیوتر بگی چیکار کنه اون راه ها جواب نمیده ! خلاصه شما باعث شدی من یه چیز جدید یاد بگیرم که ازت ممنونم !

حاشیه بسه ، دوست عزیز (و دوستانی که شاید برای شما هم جالب باشه) به این تیپ چیدن تیمها میگن Round-robin tournament و الکی هم قابل اجرا نیست و احتیاج به الگوریتم داره ، من از یک تابع آماده استفاده کردم اما پیاده سازیش هم خیلی سخت نیست ، اگه خیلی دوست دارین در موردش بخونین اینجا اطلاعات کاملی (http://en.wikipedia.org/wiki/Round-robin_tournament) هست.

اما کد ها :


/**

* @author D.D.M. van Zelst

* @copyright 2012

*/

function scheduler($teams){
if (count($teams)%2 != 0){
array_push($teams,"bye");
}

$away = array_splice($teams,(count($teams)/2));
$home = $teams;

for ($i=0; $i < count($home)+count($away)-1; $i++){
for ($j=0; $j<count($home); $j++){
$round[$i][$j]["Home"]=$home[$j];
$round[$i][$j]["Away"]=$away[$j];
}

if(count($home)+count($away)-1 > 2){
array_unshift($away,array_shift(array_splice($home ,1,1)));
array_push($home,array_pop($away));
}
}
return $round;
}

$clubs[] = "Sepahan";
$clubs[] = "Zob Ahan";
$clubs[] = "Esteghlal";
$clubs[] = "Foolad";
$clubs[] = "Malavan";
$clubs[] = "Pas Tehran";
$clubs[] = "Naft Tehran";
$clubs[] = "Saba Batri";
$clubs[] = "Gahar Dorood";
$clubs[] = "Ararat";
$clubs[] = "Keshavarz";
$clubs[] = "Sanat Naft";

$games = scheduler($clubs);

foreach($games as $gd){
foreach($gd as $g)
echo $g["Home"]." - ".$g["Away"]."<br>";
echo "---------------------------------<br>";
}

colors
دوشنبه 11 دی 1391, 11:38 صبح
خوب ! دو روز بود یکی دو ساعت وقت میگذاشتم و فکر میکردم خیلی الگوریتم ساده ای هست اینی که دوستمون میخواد ! خدایی اصلا ساده نیست و 99% مطمئن هستم کسی هم مثل منه دیوونه نرفته چک کنه ، حلاصه هر کاری میکردم و هر الگوریتمی مینوشتم یه جایئش ایراد داشت و تازه اگه تعداد تیم ها فرد میشد داستان تغییر میکرد ! بعضی وقت ها یه مسائلی خیلی ساده به ذهن میاد اما موقع اجرا اصلا اینطور نیست ، شاید ما بتونیم با مغزمون آنالیز راحتی بکنیم و دستی بچینیم اما وقتی میخوای به کامپیوتر بگی چیکار کنه اون راه ها جواب نمیده ! خلاصه شما باعث شدی من یه چیز جدید یاد بگیرم که ازت ممنونم !

سلام

ممنونم که وقت گذاشتین و بلاخره هم حل شد. خداوکیلی منم دو روزه وقتمو گذاشتم که بتونم الگوریتمشو بدست بیارم ولی نمیشد که نمیشد. در کل جای تشکر و تقدیر داره که برای کمک به دیگران وقتتونو میزارید...

thacker
دوشنبه 11 دی 1391, 16:08 عصر
از همگی ممنونم ... خیلی ممنونم ...
کمک بزرگی کردید ... منم چند روزه وقت گذاشتم اما به نتیجه نرسیدم تا شما کمک کردید ...
توی این لاین خطا میده اما برنامه اجرا میشه ...


array_unshift($away,array_shift(array_splice($home ,1,1)));

بازم تشکر از وقت و توضیحات شما ... :قلب:

Unique
سه شنبه 12 دی 1391, 15:53 عصر
خیلی عجیبه چون برای من خطا نمیده !!!!! منم مشکلی توی syntax کدش نمیبینم !

thacker
سه شنبه 12 دی 1391, 23:26 عصر
من روی لوکال تست کردم ، احتمالا ورژن PHP باشه ... یه @ گذاشتم قبلش که خطا رو نشون نده ... کدی که شما دادی خیلی خوب کار میکنه ... بازم تشکر ...