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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 07.09.2014, 04:36
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 21  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
MikroAcse, ты первый:
- предложил альтернативное решение
- заикнулся про скорость выполнения.

но в твоем 11 посте ты показываешь самое медленное решение с багом
Цитата:
testMikroAcse:
>Привет {0}, тебе сегодня исполнилось {{1}} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!
>Привет Юзернейм, тебе сегодня исполнилось только лишь все года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!
должно быть:
> Привет Юзернейм, тебе сегодня исполнилось {4} года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!
сначала исправь баг, потом уже критикуй

ну и ты не поверишь, решение поставленной задачи в теме всего одно. все остальное - решение задачи из 4 поста

Старый 07.09.2014, 13:46
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 22  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Это не баг, это неправильное использование функции.
Сначала оно заменяет {1} на 4, а потом {4} на "только лишь все".

Старый 07.09.2014, 15:59
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 23  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
MikroAcse,
arr = ["1", "2"]
"{{0}}" // выдаст 2
"{{1}}" // выдаст {2}

либо сделай правильную обработку вложенности, либо убери ее. иначе это баг как не посмотри

Старый 07.09.2014, 19:06
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 24  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Я не делал обработку вложенности, ты неправильно используешь функцию, вот и всё.
На этом я закончу наш разговор.

Старый 07.09.2014, 20:37
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 25  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
parse (str:String, symbol:String, arr:Array) :String{
return "Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!";
}

все работает, просто вы идиоты и ниправильна юзаити маю фукнцию

Старый 07.09.2014, 23:20
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 26  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Кстати, а ваши методы учитывают массив замены на более 10 элементов? На детском примере все быстры.
Код AS3:
var elems:Array = ["Ехал", "Грек", "а", "через", "рек", "у", "видит", "в", "е", "рак", "сунул", "руку", "за", "цап"];
var template:String = "{0} {1}{2} {3} {4}{5}, {6} {1}{2} {7} {4}{8} {9}, {10} {1}{2} {7} {4}{5} {11}, {9} {12} {11} {1}{5} {13}!!";
Цитата:
все работает, просто вы идиоты и ниправильна юзаити маю фукнцию
Из серии )
Код AS3:
function random():int
{
     return 4;
}
Цитата:
Это не баг, это неправильное использование функции.
Сначала оно заменяет {1} на 4, а потом {4} на "только лишь все".
Это баг, должно быть {4}.

Цитата:
Вам делать нечего или как? Что это за экозитка в каждой теме, если нужно ПРОСТО решить поставленную задачу?
В споре рождается истина. Пока спорящие не переходят на личности и кидаются весомыми аргументами это вообще супер.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 08.09.2014, 03:51
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 27  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
немного поправил. старый тест(x10000) теперь проходит за 130 мсек(было 140 мсек)
Код AS3:
var arr:Array = ["Ехал", "Грек", "а", "через", "рек", "у", "видит", "в", "е", "рак", "сунул", "руку", "за", "цап"];
var str:String = "{0} {1}{2} {3} {4}{5}, {6} {1}{2} {7} {4}{8} {9}, {10} {1}{2} {7} {4}{5} {11}, {9} {12} {11} {1}{5} {13}!!";
 
var result:String = "";
var openIndex:uint = 0;
var closeIndex:uint = 0;
var i:uint = 0;
parse: while (true) {
	openIndex = str.indexOf("{", i) + 1;
	if (openIndex) {
		sl: for (i = openIndex; ; i++ ) {
			switch(str.charAt(i)) {
				case "0": case "1":
				case "2": case "3":
				case "4": case "5":
				case "6": case "7":
				case "8": case "9":
					continue;
				case "}":
					break sl;
				default:
					continue parse;
			}
		}
		if(openIndex < i){
			var substr:String = str.substring(openIndex, i);
			result += str.substring(closeIndex, openIndex - 1) + arr[uint(substr)];
			closeIndex = i + 1;
		}
		continue;
	}
	break;
}
result += str.substring(closeIndex, str.length);
 
trace(result);
// Ехал Грека через реку, видит Грека в реке рак, сунул Грека в реку руку, рак за руку Греку цап!!
Цитата:
Кстати, а ваши методы учитывают массив замены на более 10 элементов? На детском примере все быстры.
у СлаваRa баг тот же, что и у MikroAcse, а у Nooob надо только плюсик в регексп дописать, что бы он стал замечать больше 10.

код СлаваRa и MikroAcse мне не нравится больше не из-за бага, а из-за того, что они не парсят строку, из чего вытекает несколько проблем, помимо бага

Старый 08.09.2014, 08:50
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 28  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
Ну так как взяли c# подход к форматированию, я не стал заморачиваться по поводу {{0}} и т.п., т.к. в c# string.Format не проверяет такие вещи, юзаешь - сам себе злобный буратино...
Хотя согласен, что для задачи можно было писать по TDD предусмотрев пару сотен вариантов инпут строки с подвохом)

Цитата:
что они не парсят строку, из чего вытекает несколько проблем, помимо бага
каких?
__________________
местонахождение

Старый 08.09.2014, 15:29
nubideus вне форума Посмотреть профиль Отправить личное сообщение для nubideus Найти все сообщения от nubideus
  № 29  
Ответить с цитированием
nubideus

Регистрация: Jan 2013
Сообщений: 322
Цитата:
в c# string.Format не проверяет такие вещи
"}{", "{}", "{}}" - FormatException

Цитата:
для вывода открывающих и закрывающих фигурных скобок необходимо использовать escape-последовательности. Для вывода открывающей или закрывающей фигурной скобки в фиксированном тексте следует поставить две открывающие или, соответственно, закрывающие фигурные скобки подряд ("{{" или "}}").
Цитата:
Интерпретация вложенных скобок не поддерживается.
т.е. если я напишу "{{0}}", то ничего не будет, выведет "{0}". как и "{{blahblah}}" => "{blahblah}"

Цитата:
c# string.Format не проверяет такие вещи, юзаешь - сам себе злобный буратино...
именно что все проверяет и кидает ошибки.

Цитата:
Цитата:
что они не парсят строку, из чего вытекает несколько проблем, помимо бага
каких?
я думаю, что для тебя и для MikroAcse не будет никаких проблем. ведь вы используете свои функции правильно...


Последний раз редактировалось nubideus; 08.09.2014 в 15:40.
Старый 08.09.2014, 16:21
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 30  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Код AS3:
			var arr:Array = ["Юзернейм", "4", "года", "завтрашний", "только лишь все"];
			var str:String = "Привет {0}, тебе сегодня исполнилось {1} {{1}} {2}. Сегодня в {3} день могут смотреть не {4}. Не скучай, {0}!";
			var res:String = "";
			var current:String;
			var nesting:int = 0;
 
			for (var j:int = 0, l:int = str.length; j < l; j++) 
			{
				var char:String = str.charAt(j);
 
				if (char == '{') {
					if (nesting == 0) {
						current = "";
					} else {
						current += '{';
					}
					nesting++;
					continue;
				}
				if (char == '}') {
					if (nesting == 1) {
						var parsed:Number = parseFloat(current);
						if (isNaN(parsed)) {
							res += "{" + current + "}";
						} else {
							res += arr[parsed];
						}
					} else {
						current += '}';
					}
					nesting--;
					continue;
				}
				if (nesting == 0) {
					res += char;
				} else {
					current += char;
				}
			}
 
			trace(res); // Привет Юзернейм, тебе сегодня исполнилось 4 {{1}} года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!
Не заменяет вовсе. Так сойдёт?

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

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

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


 


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


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