1
Биржа труда / Re: перемешивание координат
« on: February 18, 2016, 07:25:15 AM »
У меня тоже возникла подобная задача... нужно в случайном порядке перемешать пары координат в массиве...
Принцип такой: берем случайную пару координат (х,у) из нашего массива и исполузуем на свои нужды (например сохраняем в новый массив), потом на место использованных координат последовательно перемещаем все последующие координаты, а исходный массив в итоге уменьшается на 2 элемента. Все это зацикливаем, пока размер исходного массива не станет равным нулю. Выглядит очень просто:
Принцип такой: берем случайную пару координат (х,у) из нашего массива и исполузуем на свои нужды (например сохраняем в новый массив), потом на место использованных координат последовательно перемещаем все последующие координаты, а исходный массив в итоге уменьшается на 2 элемента. Все это зацикливаем, пока размер исходного массива не станет равным нулю. Выглядит очень просто:
Code: (clickermann) [Select]
WHILE(ARRSIZE($arr1) > 0)
$_N = ARRSIZE($arr1)/2 // количество пар координат
$numb = 2*RND(0, $_N-1) // номер в массиве первой координата из случайной пары
ARRPUSH($arr2, $arr1[ $numb])
ARRPUSH($arr2, $arr1[ $numb+1])
WHILE($numb < ARRSIZE($arr1)-2)
$arr1[$numb] = $arr1[$numb +2] // исключаю использованные координаты
$numb = $numb +1 // на их место перезаписываю следующие по счету
END_CYC
$numb = ARRPOP($arr1) // пара последних координат теперь передвинулась
$numb = ARRPOP($arr1) // на 2 позиции ближе к началу массива, поэтому 2 последних элемента массива можно извлечь
END_CYC