Множество индексов - это индексы. Переход к простоте / удобочитаемости.
indices = [5, 12, 17]
input = range(20)
output = []
for i in reversed(indices):
output.append(input[i:])
input[i:] = []
output.append(input)
while len(output):
print output.pop()
$integer1 = rand (1, 66); // [1 .. 66]
if ($integer1 > 25) $integer1 += 34; // [1 .. 25, 60 .. 100]
Ну, вы можете сделать свою собственную функцию, но остерегайтесь следующего. Каждое число должно быть нарисовано с равной вероятностью. Вам нужно будет определить, из какого диапазона будет получено число с вероятностью, пропорциональной размеру диапазона, например, Рисование из [1,10], [21, 40] должно составлять числа из [21,40] примерно в два раза чаще, чем из [1,10].
Вот общая идея:
Определить длину всех диапазонов.
Нарисуйте случайное число от 0 до длины всех диапазонов.
Проверьте, к какому диапазону относится число.
Нарисуйте соответствующее число из диапазона, в котором оно находится.
function randFromRanges(...$ranges) {
$totalRangeSize = array_sum(array_map(function ($range) {
return $range[1] - $range[0];
}, $ranges));
$numberToDraw = rand(0, $totalRangeSize);
foreach ($ranges as $range) {
if ($numberToDraw <= ($range[1] - $range[0])) {
return $range[0]+$numberToDraw;
} else {
$numberToDraw -= ($range[1] - $range[0]);
}
}
}
Вот песочница, которая показывает, что все значения кажутся равноправными:
http://sandbox.onlinephpfunctions.com/code/b02603e4a9986132073d203c98f8255c2dd62e47