Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.10.2011, 15:12
S.Petrov вне форума Посмотреть профиль Отправить личное сообщение для S.Petrov Найти все сообщения от S.Petrov
  № 1  
Ответить с цитированием
S.Petrov

Регистрация: Jul 2010
Сообщений: 13
По умолчанию Отсортировать элементы двухмерного массива находящиеся на одной диагонали

Есть двухмерный массив n x m строк вида:

0 | 5 | 10 | 15
1 | 6 | 11 | 16
2 | 7 | 12 | 17
3 | 8 | 13 | 18
4 | 9 | 14 | 19

Нужно преобразовать в массив содержащий список элементов, которые находятся на одной диагонали, например: [0], [1, 5], [2, 6, 10], [3, 7, 11, 15], [4, 8, 12, 16], [9, 13, 17], [14, 18], [9].

Подскажите, пожалуйста, как такое можно сделать или где можно посмотреть, решение.

Старый 20.10.2011, 15:50
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 2  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Общее кол-во диагоналей = num = (n + m - 1)
Самая длинная диагональ = max = (n <= m) ? n : m;
Код AS3:
var num:uint = (n + m - 1);
var max:uint = (n <= m) ? n : m;
 
var diagArr:Array = [];
for(var k:uint = 0;k<num;k++)
{
    var retArr:Array = [];
    var x:uint = (k > m) ? (k - m - 1) : 0;
    var y:uint = (k <= n) ? k : n;
    var l:uint = (k < max) ? k : 2*max - k;
    for(var i:uint = 0;i<l;i++)
    {
         retArr.push(sourceArr[x+i][y+i]);
    }
    diagArr.push(retArr);
}
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 20.10.2011, 17:07
S.Petrov вне форума Посмотреть профиль Отправить личное сообщение для S.Petrov Найти все сообщения от S.Petrov
  № 3  
Ответить с цитированием
S.Petrov

Регистрация: Jul 2010
Сообщений: 13
Спасибо за отклик. Но все равно что то не получется, может я что не так делаю. Вот попробовал вывести trace
Код AS3:
var n:int = 4;
			var m:int = 5;
			var sourceArr:Array = [];
			var index:int;
			trace ("sourceArray");
			for (var ii:int = 0; ii < n; ii++) {
				sourceArr[ii] = [];
				for (var jj:int = 0; jj < m; jj++) {
					sourceArr[ii][jj] = index;
					index++;
				}
				trace (sourceArr[ii]);
			}
 
 
			var num:uint = (n + m - 1);
			var max:uint = (n <= m) ? n : m;
 
			var diagArr:Array = [];
			for(var k:uint = 0;k<num;k++)
			{
				var retArr:Array = [];
				var x:uint = (k > m) ? (k - m - 1) : 0;
				var y:uint = (k <= n) ? k : n;
				var l:uint = (k < max) ? k : 2*max - k;
				for(var i:uint = 0;i<l;i++)
				{
					retArr.push(sourceArr[x+i][y+i]);
				}
				diagArr.push(retArr);
			}
 
			trace("\n\rresult\n-------------------------------------\n"+diagArr);
Получилось вот так:
Код AS3:
sourceArray
0,1,2,3,4
5,6,7,8,9
10,11,12,13,14
15,16,17,18,19
 
 
result
-------------------------------------
,1,2,8,3,9,,4,,,,4,,,4,,9

Старый 20.10.2011, 17:51
Genzo вне форума Посмотреть профиль Отправить личное сообщение для Genzo Посетить домашнюю страницу Genzo Найти все сообщения от Genzo
  № 4  
Ответить с цитированием
Genzo
 
Аватар для Genzo

блогер
Регистрация: Feb 2010
Адрес: MSK
Сообщений: 859
Записей в блоге: 3
Отправить сообщение для Genzo с помощью ICQ Отправить сообщение для Genzo с помощью Skype™
Это был набросок логики, ну если уж на то пошло, вот :
Код AS3:
var num:uint = (n + m - 1);
                var max:uint = (n <= m) ? n : m;
 
                var diagArr:Array = [];
                for(var k:uint = 0;k<num;k++)
                {
                    var retArr:Array = [];
                    var x:uint = (k >= (m - 1)) ? (k - (m - 1) + 1) : 0;
                    var y:uint = (k <= (n - 1)) ? k : (n - 1);                    
                    var l:uint = (k < max) ? (k + 1) : 2*max - k;
                    for(var i:uint = 0;i<l;i++)
                    {
                        retArr.push(sourceArr[y-i][x+i]);
                    }
                    diagArr.push(retArr);
                }
__________________
Gamedev != Gaming (http://twitter.com/#!/GenzoDev). Don't forget to [+] if it works.

Старый 20.10.2011, 18:29
S.Petrov вне форума Посмотреть профиль Отправить личное сообщение для S.Petrov Найти все сообщения от S.Petrov
  № 5  
Ответить с цитированием
S.Petrov

Регистрация: Jul 2010
Сообщений: 13
Большое спасибо, за помощь.

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 07:39.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.