Помогите с созданием уникального массива php
20 сообщений
#15 лет назад
Вот ломаю голову над одним вопросом. Может кто поможет.итак нужно создать 2хмерный массив .значит массив должен иметь такой вид
значит нужно чтоб массив состоял из 10массивов , назовем их подмассивами.
подмассивы должны состоять из номеров 0-9. причем номер не может 2жды повторятья. это первое условие.
$igra=array(0,1,2,3,4,5,6,7,8,9);
$igra=array(6,0,1,5,9,2,7,3,4,8);
$igra=array(2,......................
$igra=array(1,......................
$igra=array(5,
$igra=array(4,
$igra=array(9,
$igra=array(8,
$igra=array(7,
$igra=array(3,
где
$igra!=$igra (x={0,9},y={0,9});
то есть такая квадратная матрица где каждый столбик состоит из 0-9 цифр в котором никогда нет одной из этих цифр 2 раза, ио каждая строка тоже....
причем хочется не ограничиватсья на 10ти...
не подскажите код который сгенерирует такую табличку рандомно?
1599 сообщений
#15 лет назад
Напишу код, но за бабло, естественно. Кому охота мозг напрягать бесплатно, за окном воскресенье и +36 
20 сообщений
#15 лет назад
Буржуи за бесплатно помогли вот 3 варианта
$baseArray = array(1....10);
$count=0;
for($i=0;$i<=10;$i+) {
do{
$arr = shuffle($baseArray)
}while(!checkDuplicate($arr , $count , $array))
// check if this array is unique
$array = $a;
}
function checkDuplicate($arr , $count , $array){
if($count=0)
return true;
for($i=0;$i<$count;$i++){
if($arr == $array)
return false;
}
return true;
}
вариант 2
function show($matrix){
echo '<table border=1 cellspacing=0 cellpadding=5 style="float: left; margin-right:20px;">';
foreach($matrix as $m){
echo '<tr>';
foreach($m as $n){
echo '<td>'.$n.'</td>';
}
echo '</tr>';
}
echo '</table>';
}
//empty array to store the matrix
$matrix = array();
//this is what keeps the current number to put into matrix
$cnt = 0;
//create the simple matrix
for($i=0;$i<=9;$i++){
for($j=0;$j<=9;$j++){
$matrix = $cnt % 10;
$cnt++;
}
$cnt++;
}
//display valid simple matrix
show($matrix);
//shuffle the rows in matrix to make it random
shuffle($matrix);
//display matrix with shuffled rows.
show($matrix);
//swap the columns in matrix to make it more random.
for($i=0;$i<=9;$i++){
//pick a random column
$r = mt_rand(0, 9);
//now loop through each row and swap the columns $i with $r
for($j=0;$j<=9;$j++){
//store the old column value in another var
$old = $matrix;
//swap the column on this row with the random one
$matrix = $matrix;
$matrix = $old;
}
}
//display final matrix with random rows and cols
show($matrix);
?>
2128 сообщений
#15 лет назад
Гораздо проще создавать такую табличку последовательным перебором, а потом перемешать массив.
293 сообщения
#15 лет назад
Набросал на паскале алгоритм, как то так var matrix: array of integer;
number,i,j,vert:integer;
seter:set of 1..10;
vertf:boolean;
begin
for i:= 1 to 10 do
begin
seter:=;
FOR J:= 1 TO 10 DO
begin
vertf:=false;
NUMBER:=Random(10);
writeln(number); readln;
if not (number in seter) then
for vert:=1 to i do
if matrix=number then
VertF:=true;
if Vertf=false then begin
matrix:=number;
include(seter,number); end;
end;
end;
на работоспособность пока проверить нет возможности
3240 сообщений
1172 сообщения
#15 лет назад
tvv, то, что он хочет получить, называется генератор Судоку нахаляву.maridansoft, введите в гугле "судоку php" и следуйте по первой ссылке.
3240 сообщений
#15 лет назад
Lisio, вряд-ли ему нужно судоку, судя по проекту ссылкаТем более генераторы судоку обычно заточены на ограниченный размер 9x9, и эти алгоритмы сложнее за счет дополнительного условия — неповторяемости цифр во внутренних квадратах 3х3.
IMHO в данном случае достаточно алгоритмов для построения латинских квадратов, со времен Эйлера их придумали немало.