7х3 (7 строк и 3 ячейки):
из него нужно вывести элементы со следующими ключами:
(строка)x(ячейка)
1-1
3-1
5-1
7-1
2-3
6-3
и еще один двухмерные массив:
15х5 (15 строк и 5 ячейки)
из него нужно вывести элементы:
(строка)x(ячейка)
01-1
03-1
05-1
07-1
09-1
11-1
13-1
15-1
02-3
06-3
10-3
14-3
04-5
12-5
Оба массив строятся по одному правилу фактически это ёлочка повернутая направо.
Помогите найти алгоритм по которому нужно выводить только эти элементы и не какие больше, но что то вообще не получается придумать как это сделать, или хотя б просто скажите какие ни будь догадки.
Вопросы не свзяанные с решением проблеммы но как относящиеся к ней буду записывать сюда даы топик не засорять.
Свернутый текст
Цитата (Игорь_Vasinsky @ 15.01.2011 - 18:09) |
а что это такое, если не секрет? |
не секрет турнирная сетка)
Цитата (Игорь_Vasinsky @ 15.01.2011 - 17:04) |
я блин и так не могу понять - по каким критериям нужно выводить данные??? конкретизируй |
вот по каким критериям мне нужно понять, сейчас есть 4 примера как выводится, из этих 4 нужно выяснить это.
Цитата (Игорь_Vasinsky @ 15.01.2011 - 18:19) |
А почему такая структура массивов то? Упорядочить же можно. |
ну вот такие массивы приходят)
Спустя 39 минут (15.01.2011 - 14:39) Joker написал(а):
В приложении есть изображение двух мерного массива, красные элементы нужн вывести бирюзовые не нужно.
а вот задача с использованием php )
for ($i=1;$i<=15;$i++)
{
for ($j=1;$l<=5;$j++)
{
if (/* вот тут нужно придумать алгоритм*/)
{
// выводит
/**
* Выводить нужно только тогда когда
* $i == 01 and $j == 1
* $i == 03 and $j == 1
* $i == 05 and $j == 1
* $i == 07 and $j == 1
* $i == 09 and $j == 1
* $i == 11 and $j == 1
* $i == 13 and $j == 1
* $i == 15 and $j == 1
* $i == 02 and $j == 3
* $i == 06 and $j == 3
* $i == 10 and $j == 3
* $i == 14 and $j == 3
* $i == 04 and $j == 5
* $i == 12 and $j == 5
*/
echo $array[$i][$j];
}
else
{
// не выводим
}
}
}
а вот задача с использованием php )
Спустя 16 минут, 14 секунд (15.01.2011 - 14:55) Игорь_Vasinsky написал(а):
подожди.... если тебе известны ключи элементов массива - то в чё проблема????
например:
или автоматизация процесса нужна???
но у тя там нет постянства, т.е. - в первом уровне я вижу что у всех элементов - не чётные ключи, в вот второй и третий уровень - хаотически
например:
echo $array[1][1];
echo $array[1][3];
echo $array[1][5];
echo $array[1][6];
echo $array[2][3];
или автоматизация процесса нужна???
но у тя там нет постянства, т.е. - в первом уровне я вижу что у всех элементов - не чётные ключи, в вот второй и третий уровень - хаотически
Спустя 6 минут, 5 секунд (15.01.2011 - 15:01) Joker написал(а):
Цитата (Игорь_Vasinsky @ 15.01.2011 - 16:55) |
подожди.... если тебе известны ключи элементов массива - то в чё проблема???? |
не известно заранее размерность массива....
массивы будут примерно такие:
3х1
7х3
15х5
31х7
63х9
ну и так далее...
то есть кол-во элементов будет соответствовать определенному правилу, которое оч просто проследить, но вот как вывести определенные элементы для меня загадка.
Спустя 22 минуты, 20 секунд (15.01.2011 - 15:23) Joker написал(а):
Вот 4 примера массивов от самого маленького до самого большого что у меня хватило сил нарисовать руками.
По рисунку сразу видно как изменяется размерность массива, и какие элементы в каждом массиве нужно вывести, визуально тут есть логика но как эту логику задать через цифры....
По рисунку сразу видно как изменяется размерность массива, и какие элементы в каждом массиве нужно вывести, визуально тут есть логика но как эту логику задать через цифры....
Спустя 51 минута, 35 секунд (15.01.2011 - 16:15) Joker написал(а):
Для каждого $i не кратного 2, $j будет равняться $i*2
Берем элемент с ключами $i = 1 и $j = 1: $i не кратное 2, $j == $i*2 : вроде все работает.
Берем элемент с ключами $i = 3 и $j = 1: $i не кратное 2, $j != $i*2: не подходит, а подходить должно...
или я неправильно что то понел?
Берем элемент с ключами $i = 1 и $j = 1: $i не кратное 2, $j == $i*2 : вроде все работает.
Берем элемент с ключами $i = 3 и $j = 1: $i не кратное 2, $j != $i*2: не подходит, а подходить должно...
или я неправильно что то понел?
Спустя 2 минуты, 41 секунда (15.01.2011 - 16:18) Joker написал(а):
Вопросы не свзяанные с решением проблеммы но как относящиеся к ней буду записывать в верхний пост, да бы топик не засорять.
Спустя 1 минута, 1 секунда (15.01.2011 - 16:19) Игорь_Vasinsky написал(а):
А почему такая структура массивов то?
Упорядочить же можно.
ответ в верхнем топике через минут 10 кикну пост.
Упорядочить же можно.
ответ в верхнем топике через минут 10 кикну пост.
Спустя 5 секунд (15.01.2011 - 16:19) inpost написал(а):
Joker
Да там понятно, сейчас пытаюсь составить логарифм =) Каждый последующий $i для $j%2 !=0 будет равен средней арифметической двум предыдущим
Да там понятно, сейчас пытаюсь составить логарифм =) Каждый последующий $i для $j%2 !=0 будет равен средней арифметической двум предыдущим
Спустя 4 минуты, 58 секунд (15.01.2011 - 16:24) Игорь_Vasinsky написал(а):
да.... это поход - вывод - участников.
Спустя 6 минут, 39 секунд (15.01.2011 - 16:30) Joker написал(а):
насамом деле этого массива вообще не существует, но для задачи пришлось выдумать чтоб обьянить что требуется.
На самом деле есть 3 массива с учасниками:
На самом деле есть 3 массива с учасниками:
Цитата |
Array ( [5] => Array ( [0] => x8-root207-45-5-41 [1] => x8-root208-45-5-41 [2] => x8-root209-46-5-42 [3] => x8-root210-46-5-42 [4] => x8-root211-47-5-43 [5] => x8-root212-47-5-43 [6] => x8-root213-48-5-44 [7] => x8-root214-48-5-44 ) [4] => Array ( [0] => x8-root208-43-4-39 [1] => x8-root210-43-4-39 [2] => x8-root212-44-4-40 [3] => x8-root214-44-4-40 ) [3] => Array ( [0] => x8-root210-41-3-51 [1] => x8-root214-41-3-51 ) ) |
это массивы для таблицы 15х5
требуется из этих массивов сделать вот такую таблицу как я показал, но чтоб сделать такую таблицу нужно хотябы найти формулу по которой можно вычислить куда их писать...
Спустя 9 минут, 7 секунд (15.01.2011 - 16:40) sergeiss написал(а):
Цитата (inpost @ 15.01.2011 - 17:19) |
сейчас пытаюсь составить логарифм =) |
Может, все-таки алгоритм?

Joker - а ты попробуй с другой немного стороны зайти. Ты идешь сразу со стороны индекса $i. Но твои картинки подсказывают другое решение, что надо начинать с индекса $j:
1. $j только нечетный.
2. Для $j=1 берем все нечетные $i.
3. Для $j=3 берем первое $i=2 и далее с шагом 4.
4. Для $j=5 берем первое $i=4 и далее с шагом 8.
5. $j=7 : $i=8 и далее с шагом 16....
По-моему, закономерность есть

Ну, а для стартового $i сам подумай, тут тоже что-то просится, связанное с двойкой и величиной $j... Если я правильно вижу, то тут будет 2 в степени шага, деленного на 4. То есть, $i_start=2^($step/4)... Или что-то около этого. А на самом деле мне нужно срочно по делу одному важному ехать, так что я побежал (некогда уже больше думать над этой задачей; через часа 2-3 вернусь).
Спустя 30 минут, 58 секунд (15.01.2011 - 17:11) inpost написал(а):
Создаю =) Так, на всякий случай сохраняю всё, что придумал =)
Сам же вывод в таблицу: номеруй колонки и строки таблицы при создании.
Ну а далее для каждой $j мы имеем массив с переменными $i, осталось лишь подставить.
$i = (16 учасников - 1) (max)
$j = ??? (max)
// $j = 1;
for($temp = 1, $temp == $i, $temp++)
{
if($temp%2 != 0)
{
$array1 = $temp;
}
}
// $j = 3, и т.д. для $j которые нечётные и не равны 1!
//Можно в функцию. Новые массивы (array1,array2,array3)
//будут хранить $i в таблице, а $j мы запускаем перебором общим
foreach($array1 as $v)
{
if(!empty($tempus1))
{
$array2 = (($v + $tempus1)/2);
unset($tempus1);
}
else
{
$tempus1 = $v;
}
}
Сам же вывод в таблицу: номеруй колонки и строки таблицы при создании.
Ну а далее для каждой $j мы имеем массив с переменными $i, осталось лишь подставить.
Спустя 1 час, 37 минут, 49 секунд (15.01.2011 - 18:48) Joker написал(а):
sergeiss
Большое спасибо, всё получилось.
inpost
А тебе спасибо за старание.
Вот то что получилось:
Большое спасибо, всё получилось.
inpost
А тебе спасибо за старание.
Вот то что получилось:
<?php
$max = $data['max'];
$max *= 2;
$max--;
$maxLvlW = count($data['grids']['w']);
$maxLvlWR = $maxLvlW;
$maxLvlW *= 2;
$maxLvlW--;
echo '$max=',$max,' $maxLvlW=',$maxLvlW;
core::cfg()->advanced->logIgnorStopPhpErrorsForece = true;
$starts = array();
$steps = array();
$winner = array();
?>
<table style="border-collapse:separate; border-spacing:5px;">
<?php for ($i=1;$i<=$max;$i++): ?>
<tr>
<?php
$step = 0;
?>
<?php for ($j=1;$j<=$maxLvlW;$j++): ?>
<?php
$td_lines = $j%2 == 0;
if ($td_lines == false)
{
$step++;
}
if (!isset($winner[$step]))
{
$winner[$step] = 0;
}
$showJ = false;
$showI = false;
$showJ = $j%2 == 1;
if ($j == 1)
{
$showI = $i%2 == 1;
}
elseif ($i >= pow(2,($step-1)) && $step != 1)
{
if (!isset($starts[$step]))
{
$starts[$step] = pow(2,($step-1));
}
if ($starts[$step] == $i)
{
$showI = true;
$steps[$step] = $starts[$step] + pow(2,$step);
}
elseif ($i == $steps[$step])
{
$showI = true;
$steps[$step] += pow(2,$step);
}
//$showI = true;
}
$show = $showI && $showJ;
if ($show == true)
{
$k = $winner[$step];
$winner[$step]++;
$t = $maxLvlWR+3-$step;
}
?>
<?php if ($td_lines == true): ?>
<td style="padding:3px; width:25px; height:25px; color:black; background:white; border:1px solid red; font-size:15px;">& nbsp;</td>
<?php elseif ($show == true): ?>
<td style="padding:3px; min-width:150px; height:25px; color:black; background:white; border:1px solid red; font-size:15px;"><?php echo $data['grids']['w'][$t][$k]; ?></td>
<?php else: ?>
<td style="padding:3px; min-width:50px; height:25px; color:black; background:white; border:1px solid red; font-size:15px;">& nbsp;<?php //echo '$i=',$i,' $j=',$j,' w=',($maxLvlWR+3-$step); ?></td>
<?php endif; ?>
<?php endfor; ?>
</tr>
<?php endfor; ?>
</table>
Спустя 35 минут, 21 секунда (15.01.2011 - 19:24) sergeiss написал(а):
Цитата (Joker @ 15.01.2011 - 19:48) |
sergeiss Большое спасибо, всё получилось. |
"Спасибо сгущенкой не пахнет!"

Спустя 1 час, 3 минуты, 41 секунда (15.01.2011 - 20:27) Joker написал(а):
Цитата (sergeiss @ 15.01.2011 - 21:24) |
"Спасибо сгущенкой не пахнет!" |
Намёк понел

Слушаю ваши пожелания)
Спустя 2 минуты, 42 секунды (15.01.2011 - 20:30) Joker написал(а):
Задача слегка усложнилась:
Теперь нужно вывести не просто значения а еще доп инфу....
то что нужно в атттаче, sergeiss подсобишь еще с идей?
Нужно вывести циферки... как показанно на картинке.
Теперь нужно вывести не просто значения а еще доп инфу....
то что нужно в атттаче, sergeiss подсобишь еще с идей?
Нужно вывести циферки... как показанно на картинке.
Спустя 1 минута, 33 секунды (15.01.2011 - 20:32) inpost написал(а):
Joker
После именин всегда ломка по сладостям... Намекнул же, что "сгущенку" хочет человек =)
После именин всегда ломка по сладостям... Намекнул же, что "сгущенку" хочет человек =)
Спустя 2 минуты, 22 секунды (15.01.2011 - 20:34) inpost написал(а):
Joker
Для всех $j, которые не равны 1 делаешь: $j-1, получаешь левые соординаты для цифры 4!
А откуда берутся другие цифры - я не понял =(
И вообще, мой алгоритм оооочень похож на Сергея, только он мудро рассказал суть, а я кодом показал эту суть =)
Для всех $j, которые не равны 1 делаешь: $j-1, получаешь левые соординаты для цифры 4!
А откуда берутся другие цифры - я не понял =(
И вообще, мой алгоритм оооочень похож на Сергея, только он мудро рассказал суть, а я кодом показал эту суть =)
Спустя 10 минут, 28 секунд (15.01.2011 - 20:44) Joker написал(а):
Цифры это константы(цифры не нужно вычислять), их нужно вывести в нужных местах
Спустя 47 секунд (15.01.2011 - 20:45) Joker написал(а):
Цитата (inpost @ 15.01.2011 - 22:32) |
После именин всегда ломка по сладостям... Намекнул же, что "сгущенку" хочет человек =) |
Мне ему сгущенку послать что ли?)
Спустя 1 минута, 43 секунды (15.01.2011 - 20:47) sergeiss написал(а):
Цитата (Joker @ 15.01.2011 - 21:30) |
Нужно вывести циферки... как показанно на картинке. |
Ну дык... И кто мешает?

По-моему, тут проще некуда:
1. Цифра 4 выводится в той же строке (индекс $i), что и информация справа от неё (есть привязка к $j).
2. Количество выводимых цифр (в столбце) равно ($j+1), т.е. просто равно $j того столбца, который справа. Самая верхняя цифра 1, затем 3 до тех пор, пока не дойдем до строки, где должна быть 4, затем опять 3 и в конце 2....
Вроде как просто получается?
Спустя 6 минут, 27 секунд (15.01.2011 - 20:53) inpost написал(а):
Они там разные, вверху одни, внизу другие. Они не связаны с основным выводом?
Спустя 1 минута, 11 секунд (15.01.2011 - 20:55) inpost написал(а):
В целом я бы сформировал один огромный массив, и в каждой ячейке проверял, если массив с номером ячейки существует - то выводить туда.
Спустя 1 минута, 55 секунд (15.01.2011 - 20:57) Joker написал(а):
Цитата (sergeiss @ 15.01.2011 - 22:47) |
Вроде как просто получается? |
Ага а если учесть что таблиц в html строится не по столбцам а по строкам и заранее нету расчета на следующий столбец... хотя можно попробовать вычислить потопал пробовать)
Спустя 20 минут, 56 секунд (15.01.2011 - 21:17) sergeiss написал(а):
Цитата (Joker @ 15.01.2011 - 21:57) |
Ага а если учесть что таблиц в html строится не по столбцам а по строкам и заранее нету расчета на следующий столбец... хотя можно попробовать вычислить потопал пробовать) |
"А чего его пробовать? Сало як сало"

Кто тебе мешает создать 2-мерный массив, который заполняешь сначала, а по окончании обработки создаешь таблицу??? Прямо как чечачо какой-то...

Спустя 8 минут, 9 секунд (15.01.2011 - 21:26) inpost написал(а):
sergeiss
Опять тоже самое...
Опять тоже самое...
Спустя 2 часа, 19 минут, 2 секунды (15.01.2011 - 23:45) Joker написал(а):
sergeiss
[b]inpost[b]
Сделал как и сказали набил массив после его форичами вывел)
А теперь пошли ягодки)
другая сторона таблицы)
в аттаче. время 2 олова не варит если есть у кого какие идеи кидайте.
[b]inpost[b]
Сделал как и сказали набил массив после его форичами вывел)
А теперь пошли ягодки)
другая сторона таблицы)
в аттаче. время 2 олова не варит если есть у кого какие идеи кидайте.
Спустя 47 минут, 58 секунд (16.01.2011 - 00:33) inpost написал(а):
Joker
Узнай полную длину: 15, и поверни в обратную сторону.
Где было 15 - стало 1, где было 14 - стало 2.
И ещё, выстави тут готовый код =) Мне аж самому стало интересно, как ты реализовал.
Узнай полную длину: 15, и поверни в обратную сторону.
Где было 15 - стало 1, где было 14 - стало 2.
x=16; // (длина)
$j = $x - $j; //Было 15, стало 1, было 13 - стало 3.
И ещё, выстави тут готовый код =) Мне аж самому стало интересно, как ты реализовал.
Спустя 9 часов, 33 минуты, 59 секунд (16.01.2011 - 10:07) Joker написал(а):
Чот до меня не дошло как ты хочешь сделать.
Спустя 3 часа, 7 минут, 53 секунды (16.01.2011 - 13:14) Joker написал(а):
все отдыхают?) или не кто не знает?)
Спустя 2 часа, 41 минута, 26 секунд (16.01.2011 - 15:56) inpost написал(а):
Joker
Спим! Я только в 2 часа дня проснулся. Ты сделай не справа на лево, а слева направо. (только в этот раз по четным числам $j==1).
Когда получится зеркальное изображение слева направо, тогда перенеси в обратную сторону по проекции.
Вот смотри, максимальное число $j = 15 (то есть в таблице всего 15 колонок).
Тогда кол. колонок +1 (ответ 16). И ко всему массиву применяешь следующую формулу.
$j = 16 - $j.
Если в том виде она была: $j =1, $i = 1, то по этой формуле уже $j = 15, $i = 1; Как раз зеркально отобразилась по оси X ($j)
Спим! Я только в 2 часа дня проснулся. Ты сделай не справа на лево, а слева направо. (только в этот раз по четным числам $j==1).
Когда получится зеркальное изображение слева направо, тогда перенеси в обратную сторону по проекции.
Вот смотри, максимальное число $j = 15 (то есть в таблице всего 15 колонок).
Тогда кол. колонок +1 (ответ 16). И ко всему массиву применяешь следующую формулу.
$j = 16 - $j.
Если в том виде она была: $j =1, $i = 1, то по этой формуле уже $j = 15, $i = 1; Как раз зеркально отобразилась по оси X ($j)
Спустя 7 дней, 19 часов, 38 минут, 26 секунд (24.01.2011 - 11:34) Joker написал(а):
Я сделал еще проще) покажу сегодня завтра.