-
-
Save laacz/10423b5c3cabef780494 to your computer and use it in GitHub Desktop.
Slavenais [Endijs coding challange](http://endijs.com/2014/11/21/programmetaji-ka-butu-ar-nelielu-skriptu/) :)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* @param array $names Masīvs ar visiem dalībniekiem. Piemēram, ['a', 'b', 'c', 'd'] | |
* @param array $exclusions Masīvs ar masīviem, kuros ir pāri, kuri nedrīkst tikt izlozēti. Secība nav būtiska. | |
* Piemēram, [['a', 'b'], ['b', 'c']] | |
* @return array|bool Vai nu pāris, vai false, ja pāri izveidot neizdodas. | |
*/ | |
function make_pair(Array $names, Array $exclusions = []) { | |
// Strādājam, kamēr ir ar ko strādāt. | |
while ($names) { | |
// Pirmais veiksminieks. | |
$first = $names[rand(0, count($names) - 1)]; | |
// Taisām šōrtlistu ar iespējamajiem paŗiem, kuri ietver veiksminieku. | |
$shortlist = array_values(array_filter($names, function($name) use ($exclusions, $first) { | |
if ($name == $first) return false; | |
if (in_array([$name, $first], $exclusions, true)) return false; | |
if (in_array([$first, $name], $exclusions, true)) return false; | |
return true; | |
})); | |
// Ja nu gadījumā neveiksmīga pāra pirmā puse (tāda, kura nevar būt nevienā pārī, īsinām kandidātu sarakstu). | |
if (!$shortlist) { | |
$index = array_search($first, $names); | |
unset($names[$index]); | |
$names = array_values($names); | |
continue; | |
} | |
// No šōrtlista atlasām otro pusīti. | |
$second = $shortlist[rand(0, count($shortlist) - 1)]; | |
// Darīts, lieta cepurē. | |
return [$first, $second]; | |
} | |
} | |
$participants = ['a', 'b', 'c', 'd']; | |
$exclusions = [['a', 'b'], ['c', 'd'], ['b', 'c'], ['a', 'c'], ['b', 'd']]; | |
if ($pair = make_pair($participants, $exclusions)) { | |
echo "{$pair[0]} dāvina dāvanu {$pair[1]}\n"; | |
} else { | |
echo "Atbilstoši nosacījumiem pāri izveidot neizdvās.\n"; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment