|
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
MikroAcse, ты первый:
- предложил альтернативное решение - заикнулся про скорость выполнения. но в твоем 11 посте ты показываешь самое медленное решение с багом Цитата:
ну и ты не поверишь, решение поставленной задачи в теме всего одно. все остальное - решение задачи из 4 поста |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Это не баг, это неправильное использование функции.
Сначала оно заменяет {1} на 4, а потом {4} на "только лишь все". |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
MikroAcse,
arr = ["1", "2"] "{{0}}" // выдаст 2 "{{1}}" // выдаст {2} либо сделай правильную обработку вложенности, либо убери ее. иначе это баг как не посмотри |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
Я не делал обработку вложенности, ты неправильно используешь функцию, вот и всё.
На этом я закончу наш разговор. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
parse (str:String, symbol:String, arr:Array) :String{
return "Привет Юзернейм, тебе сегодня исполнилось 4 года. Сегодня в завтрашний день могут смотреть не только лишь все. Не скучай, Юзернейм!"; } все работает, просто вы идиоты и ниправильна юзаити маю фукнцию |
|
|||||
Кстати, а ваши методы учитывают массив замены на более 10 элементов? На детском примере все быстры.
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}!!"; Цитата:
Цитата:
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Jan 2013
Сообщений: 322
|
немного поправил. старый тест(x10000) теперь проходит за 130 мсек(было 140 мсек)
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); // Ехал Грека через реку, видит Грека в реке рак, сунул Грека в реку руку, рак за руку Греку цап!! Цитата:
код СлаваRa и MikroAcse мне не нравится больше не из-за бага, а из-за того, что они не парсят строку, из чего вытекает несколько проблем, помимо бага |
|
|||||
Ну так как взяли c# подход к форматированию, я не стал заморачиваться по поводу {{0}} и т.п., т.к. в c# string.Format не проверяет такие вещи, юзаешь - сам себе злобный буратино...
Хотя согласен, что для задачи можно было писать по TDD предусмотрев пару сотен вариантов инпут строки с подвохом) Цитата:
__________________
местонахождение |
|
|||||||
Регистрация: Jan 2013
Сообщений: 322
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Последний раз редактировалось nubideus; 08.09.2014 в 15:40. |
|
|||||
Регистрация: Feb 2012
Сообщений: 1,540
|
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. |
|
« Предыдущая тема | Следующая тема » |
|
|