Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Попытка на PHP / 9 сообщений из 9, страница 1 из 1
30.07.2014, 23:40
    #38709581
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
Ребят, никто все таки не сможет помочь? Никак не лезет в голову как решить задачку, вот попытался сделать на пхп:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
<?php
	$max_15=3;
	$max_30=$max_15*2;

	$PostsArray=Array();
	$GroupsArray=Array();
	$MessageArray=Array();

	if(count($messagesList)){
		$i=1;
		$j=0;
		$m=0;
		foreach($messagesList as $k=>$v){
			$MessageArray[]=substr('ABCDEFGHIJKLMNOP',$j,1).$i;
			if($i%$max_15==0){
				$i=0;	
				$j++;
			}
			$i++;
			$m++;
		}
		for($i=0;$i<count($groups);$i++){
			$GroupsArray[$i]['id']=$groups[$i]['id'];
			$GroupsArray[$i]['messages']=array();
		}

		$prevCount=0;
		for($l=1;$l<26;$l++){

			if(isset($RowArray))
				unset($RowArray);
			$RowArray=array();
			$countGroup=0;
			foreach($GroupsArray as $k=>$v){

       				foreach($MessageArray as $text){

       					if(($prevCount<count($groups) && $prevCount!=0 && count($RowArray)>=($prevCount-1)) && count($RowArray)<$max_30 && $l%2==0){
       						if(!in_array($text,$RowArray,true) && !in_array($text,$GroupsArray[$k]['messages'],true)){
       							$GroupsArray[$k]['messages'][]=$text;
       							$RowArray[]=$text;

       							break;
       						}
       					}
       					else if(count($RowArray)<$max_30 && $l%2!=0){
       						if(!in_array($text,$RowArray,true) && !in_array($text,$GroupsArray[$k]['messages'],true)){
       							$GroupsArray[$k]['messages'][]=$text;
       							$RowArray[]=$text;

       							break;
       						}
       					}
       					else if (count($RowArray)>=$max_30 && $l%2!=0){
       						$GroupsArray[$k]['messages'][]='0';
       						$RowArray[]='0';

       						break;
       					} 
       					else if (count($RowArray)<$max_30 && $l%2==0){
       						$GroupsArray[$k]['messages'][]='0';
       						$RowArray[]='0';

       						break;
       					}
       					else if (count($RowArray)>=$max_30 && $l%2==0){
       						if(!in_array($text,$RowArray,true) && !in_array($text,$GroupsArray[$k]['messages'],true)){
       							$GroupsArray[$k]['messages'][]=$text;
       							$RowArray[]=$text;
       							break;
       						}
       					}
       				}

                                $countGroup++;

				if(count($RowArray)-1<$k){
					$prevCount=count($RowArray);
					for($i=count($RowArray)-1;$i<$k;$i++){
						$RowArray[]='0';
					}
                                }


				if($k==count($groups)-1){
       					$PostsArray=array_merge($PostsArray,$RowArray);
					unset($RowArray);
					break;
				}
			}
			unset($RowArray);
		}
	}
//выводим	         	
	$i=0;
	$j=0;
	foreach($PostsArray as $k=>$v){
		if($i%12!=0)
			echo $v."\t";
		if($i%12==0)
			echo "\r\n".$v."\t";
		$i++;
	}
?>


Почти получилось, только нифига не получилось, часть таблицы не заполнена вовсе, часть таблицы заполнена криво:
...
Рейтинг: 0 / 0
30.07.2014, 23:43
    #38709584
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
не туда запостил, надеюсь модератор перенесет, продолжение этой темы Комбинаторика. Алгоритм составление таблицы
...
Рейтинг: 0 / 0
31.07.2014, 17:32
    #38710253
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
А задача то какая?
...
Рейтинг: 0 / 0
31.07.2014, 22:02
    #38710403
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
AreostarА задача то какая?
восстановить задачу по реализации
...
Рейтинг: 0 / 0
31.07.2014, 22:45
    #38710421
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
Areostar,

задача сама по ссылке из второго поста, продублирую ссылку
...
Рейтинг: 0 / 0
01.08.2014, 10:48
    #38710591
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
Евгений1000задача сама по ссылке из второго поста, продублирую ссылку
ИзопропилAreostarА задача то какая?
восстановить задачу по реализацииДа, это немного напоминает "заданы числа 7, 45, 126, 432, восстановить последовательность"
:)
...
Рейтинг: 0 / 0
01.08.2014, 13:24
    #38710787
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
S.G.,

ну в принципе да, только последовательность тут не совсем простая. Мало того что значения не должны пересекаться ни по вертикали, ни по горизонтали, так еще и должны делиться по строкам
...
Рейтинг: 0 / 0
01.08.2014, 18:42
    #38711180
Евгений1000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
Хух, решил, может кому то пригодиться (только бы правильно сформулировать условие задачи, чтоб страждующие могли поиском найти):
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
<?php

	//максимум в 15 минут
	$max_15=3;
	$max_30=$max_15*2;


	$GroupsArray=Array();
	$PostsArray=Array();
	$MessageArray=Array();


	if(count($messagesList)){
		$i=1;
		$j=0;
		$m=0;
		foreach($messagesList as $k=>$v){
			$MessageArray[]=substr('ABCDEFGHIJKLMNOP',$j,1).$i;
			if($i%($max_15+1)==0){
				$i=0;	
				$j++;
			}
			$i++;
			$m++;
		}
		$a=$MessageArray;
		for($b=0;$b<count($groups)-1;$b++){
			$MessageArray=array_merge($MessageArray,$a);
		}

		for($i=0;$i<count($groups);$i++){
			$GroupsArray[$i]['id']=$groups[$i]['id'];
			$GroupsArray[$i]['messages']=array();

		}
		
		$RowArray=Array();

		for($l=1;$l<25;$l++){

			if(isset($RowArray))
				unset($RowArray);
			$RowArray=array();
			$m=0;
			foreach($GroupsArray as $k=>$v){
       				foreach($MessageArray as $it=>$text){

       					if(count($RowArray)<$max_30 && $l%2!=0){

						if(isset($MessageArray[$it+$k*($max_15+1)]))
							$text=$MessageArray[$it+$k*($max_15+1)];

       						if(!in_array($text,$RowArray,true) && !in_array($text,$GroupsArray[$k]['messages'],true)){
       							$GroupsArray[$k]['messages'][]=$text;
       							$RowArray[]=$text;
       							break;
       						}
       					}
       					else if (count($RowArray)>=$max_30 && $l%2!=0 && $k<count($groups)){
       						$GroupsArray[$k]['messages'][]='0';
       						$RowArray[]='0';
       						break;
       					} 
       					else if (count($RowArray)<$max_30 && $l%2==0 && count($RowArray)<count($groups)){
       						$GroupsArray[$k]['messages'][]='0';
       						$RowArray[]='0';
       						break;
       					}
       					else if (count($RowArray)>=$max_30 && $l%2==0 && $k<count($groups)){
						if(isset($MessageArray[$it+$max_15-1+$k*($max_15+1)]))
							$text=$MessageArray[$it+$max_15-1+$k*($max_15+1)];
       						if(!in_array($text,$RowArray,true) && !in_array($text,$GroupsArray[$k]['messages'],true)){
       							$GroupsArray[$k]['messages'][]=$text;
       							$RowArray[]=$text;
       							break;
       						}
       					}
       				}
				if($k==count($groups)-1){
       					$PostsArray=array_merge($PostsArray,$RowArray);
					break;
				}

			}

			unset($RowArray);
		}
	}
	         	
	$i=0;
	$j=0;
	foreach($PostsArray as $k=>$v){
		if($i%count($groups)!=0)
			echo $v."\t";
		if($i%count($groups)==0)
			echo "\r\n".$v."\t";
		$i++;
	}

?>


У меня в ответе 12 групп, но проверял и вроде как работает при любом количестве столбцов.
Алгоритм довольно простой получился (просьба ногами не пинать), портировать на любой другой язык будет не сложно.
Результат:
авторA1 B1 C1 A2 B2 C2 0 0 0 0 0 0
0 0 0 0 0 0 A3 B3 C3 A4 B4 C4
A2 B2 C2 A1 B1 C1 0 0 0 0 0 0
0 0 0 0 0 0 A4 B4 C4 A3 B3 C3
A3 B3 C3 A4 B4 C4 0 0 0 0 0 0
0 0 0 0 0 0 B1 C1 A1 B2 C2 A2
A4 B4 C4 A3 B3 C3 0 0 0 0 0 0
0 0 0 0 0 0 B2 C2 A2 B1 C1 A1
B1 C1 A1 B2 C2 A2 0 0 0 0 0 0
0 0 0 0 0 0 B3 C3 A3 B4 C4 A4
B2 C2 A2 B1 C1 A1 0 0 0 0 0 0
0 0 0 0 0 0 B4 C4 A4 B3 C3 A3
B3 C3 A3 B4 C4 A4 0 0 0 0 0 0
0 0 0 0 0 0 C1 A1 B1 C2 A2 B2
B4 C4 A4 B3 C3 A3 0 0 0 0 0 0
0 0 0 0 0 0 C2 A2 B2 C1 A1 B1
C1 A1 B1 C2 A2 B2 0 0 0 0 0 0
0 0 0 0 0 0 C3 A3 B3 C4 A4 B4
C2 A2 B2 C1 A1 B1 0 0 0 0 0 0
0 0 0 0 0 0 C4 A4 B4 C3 A3 B3
C3 A3 B3 C4 A4 B4 0 0 0 0 0 0
0 0 0 0 0 0 A1 B1 C1 A2 B2 C2
C4 A4 B4 C3 A3 B3 0 0 0 0 0 0
0 0 0 0 0 0 A2 B2 C2 A1 B1 C1
...
Рейтинг: 0 / 0
29.08.2014, 19:56
    #38733125
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Попытка на PHP
Молодец
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Попытка на PHP / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]