powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Попытка на PHP
9 сообщений из 9, страница 1 из 1
Попытка на PHP
    #38709581
Евгений1000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят, никто все таки не сможет помочь? Никак не лезет в голову как решить задачку, вот попытался сделать на пхп:
Код: 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
Попытка на PHP
    #38709584
Евгений1000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не туда запостил, надеюсь модератор перенесет, продолжение этой темы Комбинаторика. Алгоритм составление таблицы
...
Рейтинг: 0 / 0
Попытка на PHP
    #38710253
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А задача то какая?
...
Рейтинг: 0 / 0
Попытка на PHP
    #38710403
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AreostarА задача то какая?
восстановить задачу по реализации
...
Рейтинг: 0 / 0
Попытка на PHP
    #38710421
Евгений1000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Areostar,

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

ну в принципе да, только последовательность тут не совсем простая. Мало того что значения не должны пересекаться ни по вертикали, ни по горизонтали, так еще и должны делиться по строкам
...
Рейтинг: 0 / 0
Попытка на PHP
    #38711180
Евгений1000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хух, решил, может кому то пригодиться (только бы правильно сформулировать условие задачи, чтоб страждующие могли поиском найти):
Код: 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
Попытка на PHP
    #38733125
Фотография Areostar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Молодец
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Попытка на PHP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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