Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Не, это не экзотично. "Мша и мудведь" интереснее.
6 окт 19, 22:01    [21987807]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 942
если формулу можно вывести, то её место в макросе вообще )
я сразу сказал про математиков
а пока вы предлагаете каждой ячейке вызывать функцию.
6 окт 19, 22:04    [21987808]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1771
полудух
если формулу можно вывести, то её место в макросе вообще )
я сразу сказал про математиков
а пока вы предлагаете каждой ячейке вызывать функцию.


которая считает по формуле
6 окт 19, 22:10    [21987812]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42917
Да что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.

Картинка с другого сайта.

Тематически связано с https://www.sql.ru/forum/1303834/tyapnichnaya-budushhaya-multipotochnost
6 окт 19, 22:38    [21987820]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 942
или с этим? https://www.sql.ru/forum/1146875-3/tyapnichnaya-geografiya?mid=17384728#17384728
7 окт 19, 02:02    [21987870]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1840
mayton
Да что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.
Я не понял.

Со спиралью разобрались?
7 окт 19, 06:31    [21987883]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dima T
Member

Откуда:
Сообщений: 14096
Написал преобразование обычных координат в спиральные
// Номер ячейки (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");
	}
}
7 окт 19, 07:06    [21987886]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42917
Gennadiy Usov
mayton
Да что там спираль! Давайте сразу функцию которая возвращает кривую Гилберта.
Можно итератор. По сабжу мой вариант - двухпоточный. И это мать ево не круто.
Я не понял.

Со спиралью разобрались?

Спираль не особо интересна IMHO.
Так... Для старта беседы.
7 окт 19, 07:41    [21987893]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
полудух
Member

Откуда: планета орков, г.Зверополис
Сообщений: 942
переформатировал
как лучше?
//##############################################################################
// Номер ячейки (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;
}
//##############################################################################
7 окт 19, 12:53    [21988121]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1840
полудух
переформатировал
как лучше?
//##############################################################################
// Номер ячейки (x,y) на спирали в квадрате n*n
Это не интересно.

Нужен прямоугольник n * m.21987713
7 окт 19, 13:07    [21988143]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42917
полудух
переформатировал
как лучше?
    else if     (x == k + q - 1)        {r = y - k + q;}
    else if     (y == k + q - 1)        {r = k - x + q * 3 - 2;}

Это ужасно. Оставь как было.
7 окт 19, 13:20    [21988164]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48641
Соколинский Борис
Строим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.

Отлично. Но при этом цифра 1 вместо центра внезапно оказывается у правого края матрицы.
7 окт 19, 13:35    [21988186]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dima T
Member

Откуда:
Сообщений: 14096
Dimitry Sibiryakov
Соколинский Борис
Строим алгоритм обхода "из угла", потом перенумеровываем в обратном порядке.

Отлично. Но при этом цифра 1 вместо центра внезапно оказывается у правого края матрицы.

Почему? Вместо 1,2,...,9 сделай 9,8,...,1. Количество чисел заранее известно n*m
7 окт 19, 13:42    [21988203]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1771
Gennadiy Usov
Это не интересно.

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


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;
7 окт 19, 15:16    [21988375]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Dima T
Member

Откуда:
Сообщений: 14096
Aleksandr Sharahov
  if (x<0) or (x>=xSize) or (y<0) or (y>=ySize) then Result:=-1

Можно проще проверить d >= 0
7 окт 19, 15:19    [21988383]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1771
Dima T,

точно
7 окт 19, 15:24    [21988393]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

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

На МЛ, не шедевр, конечно. Всё же непосредственное вычисление координат удобнее, нежели закраска по спирали. Так что не нужно экзотики. Тем не менее.
Исходник, конечно подводные камни были, закрыл заплатками
+
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

Данные
+

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;
     Ты больной?..

7 окт 19, 18:50    [21988680]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
забыл добавить. Спираль закручивается по часовой от угла А(1,1), при нечётности внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.). В примерах видно.
7 окт 19, 18:56    [21988685]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
mayton
Member

Откуда: loopback
Сообщений: 42917
exp98, шикарно.

Спс.
7 окт 19, 18:57    [21988686]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1840
exp98
На МЛ, не шедевр, конечно. Всё же непосредственное вычисление координат удобнее, нежели закраска по спирали. Так что не нужно экзотики. Тем не менее.
Исходник, конечно подводные камни были, закрыл заплатками
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?

Подгонка?
7 окт 19, 19:53    [21988729]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Здесь объяснено.
exp98
внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.).
В даном случае столб [41 43 45 44 42]'.
7 окт 19, 20:04    [21988739]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1840
exp98
Здесь объяснено.
exp98
внутри может остаться строка либо столб. Так вот, если строка, то её заполняю подряд, если столб, то его по псевдоспирали (верх-низ. верх-низ и т.д.).
В даном случае столб [41 43 45 44 42]'.
То что "верх-низ. верх-низ" к математике мало имеет отношение.
Это несколько иное.

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

По условию задачи должно быть плавное заполнение последнего участка.
7 окт 19, 20:09    [21988744]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Gennadiy Usov, это не чехарда, это, сказано выше уже, псевдоспираль.
Я не читал про плавное заполнение, очень нужно если, возьми вторую половину проги (после else ), и переделай в ней вторую половину сам. Потом напишешь статью про плавное заполнение вертикальных участков.
7 окт 19, 20:52    [21988818]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
Gennadiy Usov
Member

Откуда:
Сообщений: 1840
exp98
Gennadiy Usov, это не чехарда, это, сказано выше уже, псевдоспираль.
Я не читал про плавное заполнение, очень нужно если, возьми вторую половину проги (после else ), и переделай в ней вторую половину сам. Потом напишешь статью про плавное заполнение вертикальных участков.
Почему горизонтальный участок заполняется нормально,
а вертикальный участок заполняется через Ж(вверх-вниз)?
7 окт 19, 21:03    [21988832]     Ответить | Цитировать Сообщить модератору
 Re: Ну что... с пятницей чтоли  [new]
exp98
Member

Откуда:
Сообщений: 1846
Gennadiy Usov, здесь объяснено В случае возникновения вопросов см. данный пост.
7 окт 19, 21:35    [21988874]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Программирование Ответить