Pull to refresh

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

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

Условие достаточно простое. Есть случайное число и заданное количество игровых кубиков. Значение каждого кубика может быть от 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;
	}

Tags:
Hubs:
-35
Comments39

Articles