...

пятница, 13 июня 2014 г.

Разделить число на заданное количество кубиков

Столкнулся тут с задачкой, стали интересны пути решения, отличные от моего, и, желательно, на другом языке.

Условие достаточно простое. Есть случайное число и заданное количество игровых кубиков. Значение каждого кубика может быть от 1 до 6. Нужно разбить число таким образом, чтобы на выходе получился массив значений для каждого кубика. Причём при каждом вызове значения этих кубиков должны быть случайными.

Например:

Число 18 и 4 кубика. Ответ: [6,3,5,4];


Моё решение под катом и спойлером…



Скрытый текст


public function splitDices($number, $dicesCount)
{
$dices = [];

if ($number > $dicesCount * 6 || $number < $dicesCount)
throw new \Exception('Wrong number for split');

$j = 0;
for ($i = $dicesCount - 1 ; $i > 0; $i--)
{
$diff = $number - $i * 6;

if ($diff > 0)
$dices[$j] = rand($diff, 6);
else
{
if ($number - $i * 1 > 6) $max = 6;
elseif ($number - $i * 1 <= 0) $max = $number;
else $max = $number - $i * 1;

$dices[$j] = rand(1, $max);
}

if ($i > 1)
$number -= $dices[$j];

$j++;
}
$dices[$j] = $number - $dices[$j-1];

return $dices;
}





This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий