मैं भी एक समाधान PHP में लिखा लिखा था। मैंने पेट्रिक बोडिन के जवाब को देखा, लेकिन सोचा कि एक आसान तरीका होना चाहिए।
यह क्या करता है जो अंधेरे ने पूछा: यह सभी बीजों सही स्थिति में देता है। मैच उनके उदाहरण के समान हैं, लेकिन प्रीटीयर ऑर्डर में, बीज 1 और बीज संख्या 16 स्कीमा के बाहर हैं (जैसा कि आप टेनिस टूर्नामेंट में देखते हैं)।
यदि कोई परेशान नहीं है (जिसका मतलब है कि उच्च बीज वाले खिलाड़ी हमेशा निचले बीज वाले खिलाड़ी से जीतते हैं), तो आप फाइनल में बीज 1 बनाम बीज 2 के साथ समाप्त हो जाएंगे।
यह वास्तव में दो परिणाम होते हैं अधिक:
यह सही क्रम
यह सही स्थिति में बाई में भर जाता है ((जो सही स्थिति में बाई डालने के लिए एक आवश्यकता है) से पता चलता यदि आवश्यक हो तो)
क्या एक भी उन्मूलन ब्रैकेट की तरह दिखना चाहिए के बारे में एक सही स्पष्टीकरण: http://blog.playdriven.com/2011/articles/the-not-so-simple-single-elimination-advantage-seeding/
16 प्रतिभागियों के लिए
कोड उदाहरण:
<?php
define('NUMBER_OF_PARTICIPANTS', 16);
$participants = range(1,NUMBER_OF_PARTICIPANTS);
$bracket = getBracket($participants);
var_dump($bracket);
function getBracket($participants)
{
$participantsCount = count($participants);
$rounds = ceil(log($participantsCount)/log(2));
$bracketSize = pow(2, $rounds);
$requiredByes = $bracketSize - $participantsCount;
echo sprintf('Number of participants: %d<br/>%s', $participantsCount, PHP_EOL);
echo sprintf('Number of rounds: %d<br/>%s', $rounds, PHP_EOL);
echo sprintf('Bracket size: %d<br/>%s', $bracketSize, PHP_EOL);
echo sprintf('Required number of byes: %d<br/>%s', $requiredByes, PHP_EOL);
if($participantsCount < 2)
{
return array();
}
$matches = array(array(1,2));
for($round=1; $round < $rounds; $round++)
{
$roundMatches = array();
$sum = pow(2, $round + 1) + 1;
foreach($matches as $match)
{
$home = changeIntoBye($match[0], $participantsCount);
$away = changeIntoBye($sum - $match[0], $participantsCount);
$roundMatches[] = array($home, $away);
$home = changeIntoBye($sum - $match[1], $participantsCount);
$away = changeIntoBye($match[1], $participantsCount);
$roundMatches[] = array($home, $away);
}
$matches = $roundMatches;
}
return $matches;
}
function changeIntoBye($seed, $participantsCount)
{
//return $seed <= $participantsCount ? $seed : sprintf('%d (= bye)', $seed);
return $seed <= $participantsCount ? $seed : null;
}
?>
उत्पादन:
Number of participants: 16
Number of rounds: 4
Bracket size: 16
Required number of byes: 0
C:\projects\draw\draw.php:7:
array (size=8)
0 =>
array (size=2)
0 => int 1
1 => int 16
1 =>
array (size=2)
0 => int 9
1 => int 8
2 =>
array (size=2)
0 => int 5
1 => int 12
3 =>
array (size=2)
0 => int 13
1 => int 4
4 =>
array (size=2)
0 => int 3
1 => int 14
5 =>
array (size=2)
0 => int 11
1 => int 6
6 =>
array (size=2)
0 => int 7
1 => int 10
7 =>
array (size=2)
0 => int 15
1 => int 2
आप बदलना 16 6 में मिलता है:
Number of participants: 6
Number of rounds: 3
Bracket size: 8
Required number of byes: 2
C:\projects\draw\draw.php:7:
array (size=4)
0 =>
array (size=2)
0 => int 1
1 => null
1 =>
array (size=2)
0 => int 5
1 => int 4
2 =>
array (size=2)
0 => int 3
1 => int 6
3 =>
array (size=2)
0 => null
1 => int 2
यह सिर्फ एक सुझाव है कि मैंने बिल्कुल सोचा नहीं है: फाइनल से पीछे की ओर काम करें। – AakashM
यह मूल रूप से एक ग्रे कोड है (यदि आप शून्य-अनुक्रमण का उपयोग करते हैं)। अपने नंबरिंग सिस्टम में मानक (बाइनरी प्रतिबिंबित) ग्रे कोड का अनुवाद करने के लिए, बस बिट्स को उलट दें और एक जोड़ें। – Nabb
@Nabb - मैंने पाया [यह] (http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/229068) जो दिलचस्प लग रहा है, लेकिन मुझे समझ में परेशानी हो रही है कोड (यह रूबी है जिसे मैं कुछ भी नहीं जानता) – darkangel