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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 11.07.2010, 01:44
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 11  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Согласен с Nirth, при максимальном числе труб 24 при выборе из 30 труб, получится 30^24 = 2,82429536481e+35 вариантов.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 11.07.2010, 06:30
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 12  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Да строит оно трубу на 100км за полсекунды на флэше и не жужжит. Зачем сервер нагружать?

Старый 11.07.2010, 19:25
Elff вне форума Посмотреть профиль Отправить личное сообщение для Elff Найти все сообщения от Elff
  № 13  
Ответить с цитированием
Elff

Регистрация: Nov 2009
Адрес: 59°57′ с. ш. 30°19′ в. д.
Сообщений: 17
-De-, iNils, спасибо за помощь

Остановился пока на таком варианте, надо будет доработать потом...
Код AS3:
var my_length:int = 2500; // 25 м
var cut_Ar:Array = [102,110,120,125,127,131,137,143,161,176,199,200,250,256,277,300,321,349,351,380,385,387,390];
var index_Array:Array = []; // массив с индексами нужных длин в массиве cut_Ar
var ind:int = cut_Ar.length-1;
var limit:int = 10; // допуск
function rundown():void {
	var max_cutAr:int = cut_Ar[ind];
	var min_numPipe:uint = Math.ceil(my_length/max_cutAr); // минимальное количество труб
	for (var j:int = ind; j>=0; j--) {
		if (min_numPipe<=ind) {
			var long:int = cut_Ar[j];
			var long_minus:int = cut_Ar[j-1];
			if (long<my_length+limit) {
				my_length-=long;
				index_Array.unshift(j);
			}
			if (my_length<=limit && my_length>=-limit) {
				trace("метраж: " + Number(2500-my_length))
				for (var q:int=0; q<index_Array.length; q++) {
					trace(cut_Ar[index_Array[q]])
				}
				//break;
			}
			if (my_length<long_minus-limit) {
				my_length+=long;
				index_Array.splice(0,1);
			}
			if (my_length<=limit && my_length>=-limit) {
				trace("метраж: " + Number(2500-my_length))
				for (var q2:int=0; q2<index_Array.length; q2++) {
					trace(cut_Ar[index_Array[q2]])
				}
				//break;
			}
			if (j==0) {
				index_Array = [];
				my_length = 2500;
				ind--;
				rundown();
			}
		} else {
			break;
		}
	}
}
rundown();
Цитата:
Сообщение от -De- Посмотреть сообщение
ссылка (можно в личку) на риальнэ трубопродавальный сайт =)
Серьезно? могу написать, только сайт мягко говоря убогенький

Старый 11.07.2010, 23:53
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 14  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
ужасные наименования. глаза ломает.
Код AS3:
max_cutAr
cut_Ar
index_Array
вы уж определитись со стилем..
__________________
Отряд Котовскага

Старый 12.07.2010, 00:08
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 15  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Не интересно с допуском!
Вот, раз уж я накидал, чтоб посмотреть, за сколько же оно считает, мож пригодится.
Код AS3:
		public var C:Array = [102, 120, 125, 127, 131, 133, 139, 143, 160, 177, 199, 250, 256, 277, 321, 349, 351, 385, 387, 390];
		public var sum:int = 100009;
		public var A:Array;
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			A = new Array(sum + 1);
			A[0] = 0;
			C.sort(2);//сортируем по убыванию, чтоб самые длинные трубы использовались чаще всего
			for (var i:int = 0; i < C.length; ++i) {
				for (var j:int = 0; j <= sum - C[i]; ++j) {
					if (A[j] != null && A[j + C[i]] == null) {
						A[j + C[i]] = C[i];
						if (j + C[i] == sum) {
							printTubes();
							return;
						}
					}
				}
			}
			trace("not found");
		}
		private function printTubes():void {
			var count:int = 0;
			for (var i:int = sum; i > 0; i -= A[i]) {
				count += A[i];
				trace("труба длиной "+A[i]+" метраж "+count);
			}
			A = null;
			//trace(count);
		}
Ссылка на сайт интересна в плане, что не олимпиада какая.

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

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

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


 


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


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