powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ну что... с пятницей чтоли
25 сообщений из 94, страница 3 из 4
Ну что... с пятницей чтоли
    #39872335
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, это не экзотично. "Мша и мудведь" интереснее.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872336
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если формулу можно вывести, то её место в макросе вообще )
я сразу сказал про математиков
а пока вы предлагаете каждой ячейке вызывать функцию.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872338
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухесли формулу можно вывести, то её место в макросе вообще )
я сразу сказал про математиков
а пока вы предлагаете каждой ячейке вызывать функцию.

которая считает по формуле
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872342
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.



Тематически связано с https://www.sql.ru/forum/1303834/tyapnichnaya-budushhaya-multipotochnost
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872376
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872384
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonДа что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.Я не понял.

Со спиралью разобрались?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872386
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написал преобразование обычных координат в спиральные
Код: plaintext
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.
// Номер ячейки (x,y) на спирали в квадрате n*n
int spiral(int n, int x, int y) {
	// Квадрат на котором расположена ячейка
	int k = std::min(std::min(x, n-x+1), std::min(y, n-y+1)); // Начало квадрата
	int q = n + 2 - 2*k; // Размер стороны
	// Расстояние от начала квадрата
	int r = 0;
	if (y == k) {
		r = x - k + 1;
	} else if (x == k + q - 1) {
		r = y - k + q;
	} else if (y == k + q - 1) {
		r = k - x + q*3 - 2;
	} else {
		r = k - y + q*4 - 3;
	}
	return r + n*n - q*q;
}

// Вывод квадрата n*n
void print(int n) {
	for (int y = 1; y <= n; y++) {
		for (int x = 1; x <= n; x++) {
			printf("%3d", spiral(n, x, y));
		}
		printf("\n");
	}
}
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872389
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovmaytonДа что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.Я не понял.

Со спиралью разобрались?
Спираль не особо интересна IMHO.
Так... Для старта беседы.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872508
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
переформатировал
как лучше?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
//##############################################################################
// Номер ячейки (x,y) на спирали в квадрате n*n
int spiral(int n, int x, int y)
{
    // Квадрат на котором расположена ячейка
    int k = min(min(x, n - x + 1), min(y, n - y + 1));  // Начало квадрата
    int q = n + 2 - 2 * k;                              // Размер стороны
    int r = 0;                                          // Расстояние от начала квадрата

    if          (y == k)                {r = x - k + 1;}
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}
    else                                {r = k - y + q * 4 - 3;}

    return r + n * n - q * q;
}
//##############################################################################
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872522
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудухпереформатировал
как лучше?
Код: plaintext
1.
2.
//##############################################################################
// Номер ячейки (x,y) на спирали в квадрате n*n

Это не интересно.

Нужен прямоугольник n * m. 21987713
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872535
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудухпереформатировал
как лучше?
Код: plaintext
1.
2.
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}


Это ужасно. Оставь как было.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872547
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский БорисСтроим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.
Отлично. Но при этом цифра 1 вместо центра внезапно оказывается у правого края матрицы.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872555
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСоколинский БорисСтроим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.
Отлично. Но при этом цифра 1 вместо центра внезапно оказывается у правого края матрицы.
Почему? Вместо 1,2,...,9 сделай 9,8,...,1. Количество чисел заранее известно n*m
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872660
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovЭто не интересно.

Нужен прямоугольник n * m. 21987713

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function z(x, y, xSize, ySize: integer): integer;
var
  d, t: integer;
begin;
  if (x<0) or (x>=xSize) or (y<0) or (y>=ySize) then Result:=-1
  else begin;
    d:=min(min(min(x,y),xSize-x-1),ySize-y-1);
    t:=xSize*ySize-(xSize-2*d)*(ySize-2*d);
    if d=y then Result:=t+x-d
    else if d=xSize-x-1 then Result:=t+y+xSize-3*d-1
    else if d=ySize-y-1 then Result:=t-x+2*xSize+ySize-5*d-3
    else Result:=t-y+2*xSize+2*ySize-7*d-4;
    end;
  end;
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872667
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Sharahov
Код: pascal
1.
  if (x<0) or (x>=xSize) or (y<0) or (y>=ySize) then Result:=-1


Можно проще проверить d >= 0
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872673
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

точно
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872871
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку ьайтон и Барон посчитали-таки пару доп. диапазонов для 2^2048 и 4096,
(моя оценка для них 140,79 и 17,605, что почти укладывается в дельту sqrt(Ln x), т.е. почти в одну сигму)
то и я подобрел, и отвлёкся от любимых движущихся самолётов и парашютистов.

На МЛ, не шедевр, конечно. Всё же непосредственное вычисление координат удобнее, нежели закраска по спирали. Так что не нужно экзотики. Тем не менее.
Исходник, конечно подводные камни были, закрыл заплатками
Код: javascript
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.
n= чччч; m= ааааа;
A= zeros(n,m); nc= floor(n/2); mc= floor(m/2); B= [1:n*m]; t=0; 
for k= 1:nc+1  
  hy= n-2*(k-1); hx= m-2*(k-1); 
  if n<=m
	if (2*nc < n) && (k==nc+1) %% нечётное
		A(k, k:end-k)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(k, 1+end-k)= B(t+1); t= t+1;
	end; 
	if 2*k <= n
		A(k, k:end-k)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(k:end-k, end-k+1)= B(t+1 : t+hy-1); t= t+hy-1; 
		A(end-k+1, end-k+1:-1:k+1)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(end-k+1:-1:k+1, k)= B(t+1 : t+hy-1); t= t+hy-1; 
	end; 
  else 
	if 2*k <= m  %% вертик-ный  прям-к
	    A(k, k:end-k)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(k:end-k, end-k+1)= B(t+1 : t+hy-1); t= t+hy-1; 
		A(end-k+1, end-k+1:-1:k+1)= B(t+1 : t+hx-1); t= t+hx-1; 
		A(end-k+1:-1:k+1, k)= B(t+1 : t+hy-1); t= t+hy-1; 
	else  %% вертик-ный столб
	    hx= 2; 
	    if 2*mc < m  %% нечётное
		A(k, mc+1)= B(t+1 : t+hx-1); t= t+hx-1; 
		if 2*k <= n 
		    A(end-k+1, mc+1)= B(t+1 : t+hx-1); t= t+hx-1; 
	    	    if t >= n*m  break, end; 
	    	end; 
	    end; 
	end; 
  end; 
end; [k, t], A


Данные

Код: xml
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.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
n=5; m=9;
     1     2     3     4     5     6     7     8     9
    24    25    26    27    28    29    30    31    10
    23    40    41    42    43    44    45    32    11
    22    39    38    37    36    35    34    33    12
    21    20    19    18    17    16    15    14    13

n=9; m=5;
     1     2     3     4     5
    24    25    26    27     6
    23    40    41    28     7
    22    39    43    29     8
    21    38    45    30     9
    20    37    44    31    10
    19    36    42    32    11
    18    35    34    33    12
    17    16    15    14    13

n=7; m=6;
     1     2     3     4     5     6
    22    23    24    25    26     7
    21    36    37    38    27     8
    20    35    42    39    28     9
    19    34    41    40    29    10
    18    33    32    31    30    11
    17    16    15    14    13    12

n=6; m=7; 
     1     2     3     4     5     6     7
    22    23    24    25    26    27     8
    21    36    37    38    39    28     9
    20    35    42    41    40    29    10
    19    34    33    32    31    30    11
    18    17    16    15    14    13    12

n=5; m=10;
     1     2     3     4     5     6     7     8     9    10
    26    27    28    29    30    31    32    33    34    11
    25    44    45    46    47    48    49    50    35    12
    24    43    42    41    40    39    38    37    36    13
    23    22    21    20    19    18    17    16    15    14

n=10; m=5;
     1     2     3     4     5
    26    27    28    29     6
    25    44    45    30     7
    24    43    47    31     8
    23    42    49    32     9
    22    41    50    33    10
    21    40    48    34    11
    20    39    46    35    12
    19    38    37    36    13
    18    17    16    15    14

n=5; m=11;
     1     2     3     4     5     6     7     8     9    10    11
    28    29    30    31    32    33    34    35    36    37    12
    27    48    49    50    51    52    53    54    55    38    13
    26    47    46    45    44    43    42    41    40    39    14
    25    24    23    22    21    20    19    18    17    16    15

n=11; m=5;
     1     2     3     4     5
    28    29    30    31     6
    27    48    49    32     7
    26    47    51    33     8
    25    46    53    34     9
    24    45    55    35    10
    23    44    54    36    11
    22    43    52    37    12
    21    42    50    38    13
    20    41    40    39    14
    19    18    17    16    15

n=7; m=7;
     1     2     3     4     5     6     7
    24    25    26    27    28    29     8
    23    40    41    42    43    30     9
    22    39    48    49    44    31    10
    21    38    47    46    45    32    11
    20    37    36    35    34    33    12
    19    18    17    16    15    14    13

n=6; m=6;
     1     2     3     4     5     6
    20    21    22    23    24     7
    19    32    33    34    25     8
    18    31    36    35    26     9
    17    30    29    28    27    10
    16    15    14    13    12    11

n=6; m=8;
     1     2     3     4     5     6     7     8
    24    25    26    27    28    29    30     9
    23    40    41    42    43    44    31    10
    22    39    48    47    46    45    32    11
    21    38    37    36    35    34    33    12
    20    19    18    17    16    15    14    13

n=8; m=6;
     1     2     3     4     5     6
    24    25    26    27    28     7
    23    40    41    42    29     8
    22    39    48    43    30     9
    21    38    47    44    31    10
    20    37    46    45    32    11
    19    36    35    34    33    12
    18    17    16    15    14    13

n=6; m=10;
     1     2     3     4     5     6     7     8     9    10
    28    29    30    31    32    33    34    35    36    11
    27    48    49    50    51    52    53    54    37    12
    26    47    60    59    58    57    56    55    38    13
    25    46    45    44    43    42    41    40    39    14
    24    23    22    21    20    19    18    17    16    15

n=10; m=6;
     1     2     3     4     5     6
    28    29    30    31    32     7
    27    48    49    50    33     8
    26    47    60    51    34     9
    25    46    59    52    35    10
    24    45    58    53    36    11
    23    44    57    54    37    12
    22    43    56    55    38    13
    21    42    41    40    39    14
    20    19    18    17    16    15

n=7; m=3;
     1     2     3
    16    17     4
    15    19     5
    14    21     6
    13    20     7
    12    18     8
    11    10     9

n=3; m=7;
     1     2     3
    16    17     4
    15    19     5
    14    21     6
    13    20     7
    12    18     8
    11    10     9


n=3; m=3;
     1     2     3
     8     9     4
     7     6     5

n=3; m=1;
     1
     3
     2

n=1; m=3;
     1     2     3

n=1; m=4;
     1     2     3     4

n=2; m=2;
     1     2
     4     3

n=1; m=1;
     1

n=0; m=1000;
     Ты больной?..


...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872874
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл добавить. Спираль закручивается по часовой от угла А(1,1), при нечётности внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В примерах видно.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872875
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
exp98, шикарно.

Спс.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872899
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98На МЛ, не шедевр, конечно. Всё же непосредственное вычисление координат удобнее, нежели закраска по спирали. Так что не нужно экзотики. Тем не менее.
Исходник, конечно подводные камни были, закрыл заплатками
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
n=9; m=5;
     1     2     3     4     5
    24    25    26    27     6
    23    40    41    28     7
    22    39    43    29     8
    21    38    45    30     9
    20    37    44    31    10
    19    36    42    32    11
    18    35    34    33    12
    17    16    15    14    13

А почему чехарда с цифрами под 40-45?

Подгонка?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872906
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь объяснено.
exp98внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В даном случае столб [41 43 45 44 42]'.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872910
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Здесь объяснено.
exp98внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В даном случае столб [41 43 45 44 42]'.То что "верх-низ. верх-низ" к математике мало имеет отношение.
Это несколько иное.

Чехарда невозможна.

По условию задачи должно быть плавное заполнение последнего участка.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872976
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov, это не чехарда, это, сказано выше уже, псевдоспираль.
Я не читал про плавное заполнение, очень нужно если, возьми вторую половину проги (после else ), и переделай в ней вторую половину сам. Потом напишешь статью про плавное заполнение вертикальных участков.
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39872990
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
exp98Gennadiy Usov, это не чехарда, это, сказано выше уже, псевдоспираль.
Я не читал про плавное заполнение, очень нужно если, возьми вторую половину проги (после else ), и переделай в ней вторую половину сам. Потом напишешь статью про плавное заполнение вертикальных участков.Почему горизонтальный участок заполняется нормально,
а вертикальный участок заполняется через Ж(вверх-вниз)?
...
Рейтинг: 0 / 0
Ну что... с пятницей чтоли
    #39873024
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy Usov, здесь объяснено В случае возникновения вопросов см. данный пост.
...
Рейтинг: 0 / 0
25 сообщений из 94, страница 3 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ну что... с пятницей чтоли
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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