ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > PHP, PERL, MySQL, JavaScript
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #801  
Старый 05.11.2007, 02:09
MegaDeth
Участник форума
Регистрация: 08.11.2006
Сообщений: 208
Провел на форуме:
1038169

Репутация: 184
По умолчанию

Цитата:
Сообщение от RedBull@12  
у етбя такие массивы
massiv1[x] и massiv2[y]
где X = 0...X, ну или что-то типа того
а Y = 0...Y, ну или похожее
так?
нет,

массивы генерируются так:
PHP код:
function GetPlos($mas)
{
$r=0;
$res=(($mas[3]-$mas[1])*($mas[2]-$mas[0]));
for (
$i=$mas[0];$i<$mas[2];$i++)
{
for (
$j=$mas[1];$j<$mas[3];$j++)
{

$m[$i][$j]=true;
}

}

return 
$m;
}


$mfile=file('prams.txt');
$arr=array();
for (
$i=0;$i<count($mfile);$i++)
{
$mas=explode(' ',$mfile[$i]);
//$arr=$arr+GetPlos($mas);
//print_r(GetPlos($mas)); echo '<br>';
 
GetPlos($mas);// вот эта функция возвращает массивы.

в файле
PHP код:
0 0 2 2
0 0 3 3 
имеется 2 прямоугольника. один полностью закрыт другим (начало в 0,0, заканчивается один в 2,2 другой в 3,3 (коодинаты ссотв..))

надо сделать так чтобы не перечислялись два раза те которые имеют общие точки..
 

  #802  
Старый 05.11.2007, 02:33
RedBull@12
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме:
482261

Репутация: 58
По умолчанию

MegaDeth, ответ 13?
 

  #803  
Старый 05.11.2007, 02:42
MegaDeth
Участник форума
Регистрация: 08.11.2006
Сообщений: 208
Провел на форуме:
1038169

Репутация: 184
По умолчанию

Цитата:
Сообщение от RedBull@12  
MegaDeth, ответ 13?
мм... вообщето должно получится 9... в данном случе..
если так то прямоугольник разширится до 4х3 что будет = 12... вообщем дрянь дело нада придумывать другой алгоритм...
PHP код:
 0 0 2 4 
0 0 3 3 
для удобства взял начало обеих прямоугольников с начала координат то не всегда так...
 

  #804  
Старый 05.11.2007, 03:49
RedBull@12
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме:
482261

Репутация: 58
По умолчанию

Цитата:
Сообщение от MegaDeth  
мм... вообщето должно получится 9... в данном случе..
Хм...судя по выводу массива,пересчитал сумму всех вложенных массивов у меня получилось 13(4 в первом случаи и 9 во втором)
аа...почитал немного вкурил..что-то сразу не понял...
Тогда тут вроде алгоритм не так составлен, или второй варинат - я сново не вкурил

------------
|***|##|
|***|##|
|***|##|
|#####|
|#####|
------------
Тебе какую область нудн получить? */#?
если * то в данном случи у нас полуится 2*2=4
|***|
|***|
|***|
если # то - (3*3)-(2*2)=5
------------
|##|
|##|
|##|
|#####|
|#####|
------------
9 никак не получается,только есть взять площадь большего прямоугольника.
13 получается при сложении...
------------------
|#####|***|
|#####|***|
|#####|***|
|#####|
|#####|
-------------
Какой тебе вариант нужно получить?(конечно можно еще перемножить их и т.д.)

Последний раз редактировалось RedBull@12; 05.11.2007 в 07:01..
 

  #805  
Старый 05.11.2007, 10:57
MegaDeth
Участник форума
Регистрация: 08.11.2006
Сообщений: 208
Провел на форуме:
1038169

Репутация: 184
По умолчанию

нее.. вообщем в файл пишется - координаты левой нижней точки прямоугольника затем координаты правой верхней точки. в строку. 4 числа. строк может быть много. надо посчитать площадь всех прямоугольников, но в случае наслоения площадь наслоения (те участки где они наслоились) должна учитватся только 1 раз...
вот у тя 13 получилось один прямоугольник 2*2=4 другой 3*3=9
9+4=13 НО один полностью закрыт другим
и его площадь учитывать ненадо.
***
??*
??*

Последний раз редактировалось MegaDeth; 05.11.2007 в 11:11..
 

  #806  
Старый 05.11.2007, 12:59
MegaDeth
Участник форума
Регистрация: 08.11.2006
Сообщений: 208
Провел на форуме:
1038169

Репутация: 184
По умолчанию

решение было просто до ужоса. мож кому пригодится...
PHP код:
<?php
$m
=array();
$r=0;
function 
GetPlos($mas)
{
GLOBAL 
$m,$r;
$res=(($mas[3]-$mas[1])*($mas[2]-$mas[0]));
for (
$i=$mas[0];$i<$mas[2];$i++)
{
for (
$j=$mas[1];$j<$mas[3];$j++)
{
if (!isset(
$m[$i][$j])) {
$m[$i][$j]=true$r++; }
}

}
return 
$m;
}

$mfile=file('prams.txt');
$arr=array();
for (
$i=0;$i<count($mfile);$i++)
{
$mas=explode(' ',$mfile[$i]);
GetPlos($mas);


echo 
$r;
?>
RedBull@12, большое спасибо что пытался помоч...

Последний раз редактировалось MegaDeth; 05.11.2007 в 13:04..
 

  #807  
Старый 05.11.2007, 13:44
RedBull@12
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме:
482261

Репутация: 58
По умолчанию

MegaDeth, честно не вкурил.
Твой скрипт отгда не работает у него во всех значениях получается 1...а в последних по любому должно быть часть нулей
Код:
Array (
--------[0] => Array ( 
-------------------------[0] => 1 
-------------------------[1] => 1 
--------) 
--------[1] => Array ( 
-------------------------[0] => 1 
-------------------------[1] => 1 
--------)
) 
Array ( 
---------[0] => Array ( 
--------------------------[0] => 1 
--------------------------[1] => 1 
--------------------------[2] => 1 
--------) 
---------[1] => Array ( 
--------------------------[0] => 1 
--------------------------[1] => 1 
--------------------------[2] => 1 
--------) [2] => Array ( 
--------------------------[0] => 1 
--------------------------[1] => 1 
--------------------------[2] => 1 
--------) 
)
=>наш скрипт написан не верно.
иначе нет вообще смысла в этом скрипте

Последний раз редактировалось RedBull@12; 05.11.2007 в 14:03..
 

  #808  
Старый 05.11.2007, 14:31
MegaDeth
Участник форума
Регистрация: 08.11.2006
Сообщений: 208
Провел на форуме:
1038169

Репутация: 184
По умолчанию

неее, все как надо работает.
вот сам попробуй в файл тхт запиши
0 0 2 4
0 0 3 3

потом написуй на бумаге по клеткам два прямоугольника левый нижний угол - в нач. координат, правый верхний одного - (2,4) второго - (3,3).
эти два прямоугольника будут занимать площадь 11 клеток. скрипт выдает праавду )))
 

  #809  
Старый 05.11.2007, 16:31
RedBull@12
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме:
482261

Репутация: 58
По умолчанию

Цитата:
Сообщение от MegaDeth  
неее, все как надо работает.
вот сам попробуй в файл тхт запиши
0 0 2 4
0 0 3 3

потом написуй на бумаге по клеткам два прямоугольника левый нижний угол - в нач. координат, правый верхний одного - (2,4) второго - (3,3).
эти два прямоугольника будут занимать площадь 11 клеток. скрипт выдает праавду )))
Так про что и речь тут мы складываем два массива.
Сейасч напишу скрипт,елси получится
 

  #810  
Старый 05.11.2007, 17:13
RedBull@12
Участник форума
Регистрация: 06.11.2006
Сообщений: 129
Провел на форуме:
482261

Репутация: 58
По умолчанию

MegaDeth, смотри алгоритм,ну который я могу предположить, но пока у меня пробелмы с реализацией:
1-Вычисляем максимальную длину прямоугольника.
1111111
1111111
0000000
0000000
2-Вычисляем максимальную ширину прямоугольника.
1100000
1100000
1100000
1100000
3-Создаем двумерный массив[длина][ширина], все элеменеты в массиве имеют значение 0.
по идеи у нас должно получиться что-то типа вот этого:
0000000
0000000
0000000
0000000
4-Далее заполняем/складываем по очереди все прямоугольнки с нашим нулевым массивом.
и унас получится что-то типа вот этого:
1111111
1111111
1100000
1100000
5-Дальше смотрим сколько у нас значений TRUE(1). через элелентарный цикл.

Ну походу это то что ты хотел получить, полагаю что это не совсем рационально,но елси данный цикл процедура выполняется не слишком часто и нет ограничения по памяти то оптимальный вариант.
 
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ