<?php
function pr($array_to_output)
{
print '<pre>';
print '</pre>';
}
// Function generating order participants will be placed in array
function getBracket($L) {
// List will hold insert sequence
// Bracket will hold final order of participants
// The algorithm to generate the insert sequence
for ($n = 1; $n <= $L; $n += 1) {
// If 'perfect' number, just put it (Perfect no.s: 2, 4, 8, 16, 32, etc)
$list[] = $n;
// If odd number, stuff...
} elseif ($n % 2 == 1) {
$list[] = $list[($n-1)/2];
// Else even number, stuff...
} else {
$list[] = $list[$n/2-1]+$n/2;
}
}
// Insert participant order as per insert sequence
for ($i = 1; $i <= sizeof($list); $i += 1) { $id = $list[$i-1]-1;
}
return $bracket;
}
// Find number of participants over 'perfect' number if any
function cleanList($L) {
for ($d = 1; $L > $d; $d += 1) {
if($diff == 0) {break;}
if($diff < 0) {
break;
}
}
return $diff;
}
array("Nikolai Valuev", 1), );
// Extract strength of participant
foreach ($participants as $array) {
$finorder[] = $array[1];
}
// Sort by strength, strongest first
// Remove participants above 'perfect' number
$add = cleanList
(sizeof($participants)); for ($r = 1; $r <= $add; $r += 1) {
$participants[] = null;
}
// Get corresponding bracket
$res = getBracket
(sizeof($participants)); // Align bracket results with participant list
foreach ($res as $n) {
$order[] = $n;
}
echo "The final arrangement of participants\n";
pr($participants);
?>
PD9waHAKICAgIGZ1bmN0aW9uIHByKCRhcnJheV90b19vdXRwdXQpCnsKICAgIHByaW50ICc8cHJlPic7CiAgICBwcmludF9yKCRhcnJheV90b19vdXRwdXQpOwogICAgcHJpbnQgJzwvcHJlPic7Cn0KICAgIC8vIEZ1bmN0aW9uIGdlbmVyYXRpbmcgb3JkZXIgcGFydGljaXBhbnRzIHdpbGwgYmUgcGxhY2VkIGluIGFycmF5CiAgICBmdW5jdGlvbiBnZXRCcmFja2V0KCRMKSB7CiAgICAgICAgLy8gTGlzdCB3aWxsIGhvbGQgaW5zZXJ0IHNlcXVlbmNlCiAgICAgICAgJGxpc3QgPSBhcnJheSgpOwogICAgICAgIC8vIEJyYWNrZXQgd2lsbCBob2xkIGZpbmFsIG9yZGVyIG9mIHBhcnRpY2lwYW50cwogICAgICAgICRicmFja2V0ID0gYXJyYXkoKTsKICAgICAgICAvLyBUaGUgYWxnb3JpdGhtIHRvIGdlbmVyYXRlIHRoZSBpbnNlcnQgc2VxdWVuY2UKICAgICAgICBmb3IgKCRuID0gMTsgJG4gPD0gJEw7ICRuICs9IDEpIHsKICAgICAgICAgICAgLy8gSWYgJ3BlcmZlY3QnIG51bWJlciwganVzdCBwdXQgaXQgKFBlcmZlY3Qgbm8uczogMiwgNCwgOCwgMTYsIDMyLCBldGMpCiAgICAgICAgICAgIGlmIChpc19pbnQobG9nKCRuKS9sb2coMikpIHx8ICRuID09IDEpIHsKICAgICAgICAgICAgICAgICRsaXN0W10gPSAkbjsKICAgICAgICAgICAgLy8gSWYgb2RkIG51bWJlciwgc3R1ZmYuLi4KICAgICAgICAgICAgfSBlbHNlaWYgKCRuICUgMiA9PSAxKSB7CiAgICAgICAgICAgICAgICAkbGlzdFtdID0gJGxpc3RbKCRuLTEpLzJdOwogICAgICAgICAgICAvLyBFbHNlIGV2ZW4gbnVtYmVyLCBzdHVmZi4uLgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGxpc3RbXSA9ICRsaXN0WyRuLzItMV0rJG4vMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBJbnNlcnQgcGFydGljaXBhbnQgb3JkZXIgYXMgcGVyIGluc2VydCBzZXF1ZW5jZQogICAgICAgIGZvciAoJGkgPSAxOyAkaSA8PSBzaXplb2YoJGxpc3QpOyAkaSArPSAxKSB7CiAgICAgICAgICAgICRpZCA9ICRsaXN0WyRpLTFdLTE7CiAgICAgICAgICAgIGFycmF5X3NwbGljZSgkYnJhY2tldCwgJGlkLCAwLCAkaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkYnJhY2tldDsKICAgIH0KICAgIAogICAgLy8gRmluZCBudW1iZXIgb2YgcGFydGljaXBhbnRzIG92ZXIgJ3BlcmZlY3QnIG51bWJlciBpZiBhbnkKICAgIGZ1bmN0aW9uIGNsZWFuTGlzdCgkTCkgewogICAgICAgIGZvciAoJGQgPSAxOyAkTCA+ICRkOyAkZCArPSAxKSB7CiAgICAgICAgICAgICRkaWZmID0gJEwtcG93KDIsJGQpOwogICAgICAgICAgICBpZigkZGlmZiA9PSAwKSB7YnJlYWs7fQogICAgICAgICAgICBpZigkZGlmZiA8IDApIHsKICAgICAgICAgICAgICAgICRkaWZmID0gcG93KDIsJGQpLSRMOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRkaWZmOwogICAgfQogICAgCiAgICAkcGFydGljaXBhbnRzID0gYXJyYXkoCiAgICAgICAgYXJyYXkoIkpvaG4iLCAwKSwKICAgICAgICBhcnJheSgiR2FnYW4iLCAxKSwKICAgICAgICBhcnJheSgiTWlrZSBUeXNvbiIsIDEpLAogICAgICAgIGFycmF5KCJHYWlyIiwgMCksCiAgICAgICAgYXJyYXkoIkdhbGUiLCAwKSwKICAgICAgICBhcnJheSgiUm95IEpvaG5lcyIsIDEpLAogICAgICAgIGFycmF5KCJHYWxpcCIsIDApLAogICAgICAgIGFycmF5KCJHYWxsYWdoZXIiLCAwKSwKICAgICAgICBhcnJheSgiR2FyZXR0IiwgMCksCiAgICAgICAgYXJyYXkoIk5pa29sYWkgVmFsdWV2IiwgMSksCiAgICAgICAgYXJyYXkoIkdhcm5lciIsIDApLAogICAgKTsKCiAgICAvLyBFeHRyYWN0IHN0cmVuZ3RoIG9mIHBhcnRpY2lwYW50CiAgICBmb3JlYWNoICgkcGFydGljaXBhbnRzIGFzICRhcnJheSkgewogICAgICAgICRmaW5vcmRlcltdID0gJGFycmF5WzFdOwogICAgfQogICAgLy8gU29ydCBieSBzdHJlbmd0aCwgc3Ryb25nZXN0IGZpcnN0CiAgICBhcnJheV9tdWx0aXNvcnQoJGZpbm9yZGVyLFNPUlRfREVTQywkcGFydGljaXBhbnRzKTsKCiAgICAkb3JkZXIgPSBhcnJheSgpOwoKICAgIC8vIFJlbW92ZSBwYXJ0aWNpcGFudHMgYWJvdmUgJ3BlcmZlY3QnIG51bWJlcgogICAgJGFkZCA9IGNsZWFuTGlzdChzaXplb2YoJHBhcnRpY2lwYW50cykpOwogICAgZm9yICgkciA9IDE7ICRyIDw9ICRhZGQ7ICRyICs9IDEpIHsKICAgICAgICAkcGFydGljaXBhbnRzW10gPSBudWxsOwogICAgfQoKICAgIC8vIEdldCBjb3JyZXNwb25kaW5nIGJyYWNrZXQKICAgICRyZXMgPSBnZXRCcmFja2V0KHNpemVvZigkcGFydGljaXBhbnRzKSk7CiAgICAvLyBBbGlnbiBicmFja2V0IHJlc3VsdHMgd2l0aCBwYXJ0aWNpcGFudCBsaXN0CiAgICBmb3JlYWNoICgkcmVzIGFzICRuKSB7CiAgICAgICAgJG9yZGVyW10gPSAkbjsKICAgIH0KICAgIGFycmF5X211bHRpc29ydCgkb3JkZXIsICRwYXJ0aWNpcGFudHMpOwogICAgJHBhcnRpY2lwYW50cyA9IGFycmF5X2NvbWJpbmUoJHJlcywgJHBhcnRpY2lwYW50cyk7CiAgICAKICAgIGVjaG8gIlRoZSBmaW5hbCBhcnJhbmdlbWVudCBvZiBwYXJ0aWNpcGFudHNcbiI7CiAgICBwcigkcGFydGljaXBhbnRzKTsKPz4=