Balancer: Все сообщения за 13 Апреля 2009 года

 
ПнВтСрЧтПтСбВс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Balancer

администратор
★★★★★
Balancer>> Венера не является аналогом Земли ни на каком из этапов.
S.I.> Ну тогда шансы на наличие такой же планеты близки к нулю.

То, что равнинных (условно говоря ламинарных) рек больше, чем горных (турбулентных) не делает возникновение турбулентности чем-то исключительным.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
russo> Я к слову в универе тоже популизмом занимался, бездомным жратву раздавал в Food, Not Bombs. Правда политического капиталу никакого мне не досталось, наверное потому что грядку не сделал :lol:

Но грядка в Белом доме... В Штатах другой земли больше нет? Я в юности посадил как-то более 70 сосенок под Питером. Но не у Зимнего, а в отдалённом лесхозе :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
SVN недоступен временно. Я перевожу его с apache2 на lighttpd.

...

Поправил, доступно с _http://trac.balancer.ru/svn/l2j/
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Нужно сделать из него валидный HTML

А как быть с некорректными входными данными, типа
\bтест \iтэгов\b\i ?

(вообще же, формат крайне неудобный ;))
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Суть вопроса в том, что это корректные входные данные. :)

Тогда задача недостаточно строго описана :)

\bслово1 \iслово2 \bслово3 \iслово4 можно трактовать как:
1. слово1 слово2 слово3 слово4
2. слово1 слово2 слово3 слово4
3. слово1 слово2 слово3 слово4

как нужно? :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Первое упоминание \i - включает курсив, следующее - выключает.

Понятно.

Кстати, в этом синтаксисе набор тэгов нерасширяемый без влезания в код парсера. Нет признака конца тэга. И поэтому тэг \b не отличить от \bb в фрагменте \bbold :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
На PHP у «неколенного» парсера на строке вида
000 \b\i\color(#ff0000)rrrrr \color(#00ff00) gggg\bgggg\color(#0000ff)bbbbb\colorggggg\colorrrrr\i\color, повторённой n раз столько времени выходит:

$ php markup.php
1: 0,00134897232056
10: 0,0121030807495
100: 0,445528030396
500: 11,2481658459

Какая это O-зависимость выходит? :)

...

Походу, это N2.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
$ php markup.php
1: 0,00127291679382
10: 0,0151479244232
100: 0,465785980225
500: 11,6852560043
1000: 51,3077819347

Да, видимо, N2 с небольшим :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Balancer>> 000 \b\i\color(#ff0000)rrrrr \color(#00ff00) gggg\bgggg\color(#0000ff)bbbbb\colorggggg\colorrrrr\i\color, повторённой n раз столько времени выходит:
Татарин> Результат ещё покажь. Там точно минимум тэгов? :)

code html4strict
  1. 000 <b><i><span color="#ff0000">rrrrr <span color="#00ff00"> gggg</span></span></i></b><i><span color="#ff0000">rrrr</span></i>


Оптимизация по тегам примитивная, но, вроде, лишних нет :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Упс. Вижу ошибку. На старых тестах всё ок было :) Пошёл чинить...

Это оптимизатор тэгов слишком жёсткий получился ;)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
000 <b><i><span color="#ff0000">rrrrr <span color="#00ff00"> gggg</span></span></i></b><i><span color="#ff0000"><span color="#00ff00">gggg<span color="#0000ff">bbbbb</span>ggggg</span>rrrr</span></i><span color="#ff0000"></span>

Тайминг стал похуже:

$ php markup.php
1: 0,00125098228455
10: 0,0170760154724
100: 0,482527017593
500: 14,3426609039
1000: 66,6711261272
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Кстати, если тэги не мультистрочные, то можно по строкам бить. Тогда выходит:

$ php markup.php
1: 0,0151560306549
10: 0,00933384895325
100: 0,0901589393616
500: 0,45777797699
1000: 0,906383037567

:)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Ошибка: второй [i] не нужен.

i нужен :)

Татарин> Ты закрываешь курсив и тут же открываешь, не имея ни буквы "прямого" текста. :)

Там текст дальше идёт. Так что, рано или поздно, i открыть надо будет. Так какая разница, где?

А вот ошибка - в конце опять span/span вылезли. Сейчас разберусь :)

Татарин> Есть предложение тогда сразу давать тест-файл и количество тегов.

Ну, я дал строку. Тестирую так:
code php
  1. <?php
  2.  
  3. $s = "000 \b\i\color(#ff0000)rrrrr \color(#00ff00) gggg\bgggg\color(#0000ff)bbbbb\colorggggg\colorrrrr\i\color\n";
  4. foreach(array(1,10,100,500,1000) as $size)
  5. {
  6.     $start = microtime(true);
  7.     $text = str_repeat($s, $size);
  8.     $x = markup($text);
  9.  
  10.     echo "$size: ".(microtime(true) - $start)."\n";
  11. //  echo $x;
  12. }
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Почему не "мультистрочные"? Или я тебя неверно понял? Что это такое - "мультистрочный тег"?

Который на несколько строк разбит. Т.е.:

code text
  1. \bbold
  2. bold
  3. \bnormal


Если так нельзя - то сильно быстрее ;)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Смотри, ты же можешь в первом его включении вынести его за болд, поставить первым.

А, понял. Тогда - да, задача сильно усложняется. А так, после исправления ошибки убирания пустых тэгов:

$ php markup.0.php
1: 0,00144195556641
10: 0,0147280693054
100: 0,397891044617
500: 7,74917697906
1000: 29,6116909981

code text
  1. 000 <b><i><span color="#ff0000">rrrrr <span color="#00ff00"> gggg</span></span></i></b><i><span color="#ff0000"><span color="#00ff00">gggg<span color="#0000ff">bbbbb</span>ggggg</span>rrrr</span></i>


А вот с пермутациями тэгов - да, в голову ничего быстрого не приходит.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
$ php markup.php
1: 0,0018789768219
10: 0,0115969181061
100: 0,383130788803
500: 7,61049103737
1000: 29,8531341553

[code html]
000 rrrrr ggggggggbbbbbgggggrrrr
[/code html]

Но я поступил нечестно и мой способ редукции работает только для сочетаний i и b :)

Сейчас подумаю на счёт color.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
$ php markup.php
1: 0,00167107582092
10: 0,0124468803406
100: 0,384516000748
500: 7,91936206818
1000: 30,9722850323

code html4strict
  1. 000 <i><b> <span color="#ff0000">rrrrr <span color="#00ff00"> gggg </span></span></b><span color="#ff0000"><span color="#00ff00"> gggg<span color="#0000ff">bbbbb</span>ggggg</span>rrrr </span></i><span color="#ff0000"> </span>


Вроде, окончательный вариант в первом приближении :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> Мама \bмыла\i раму\color(#ff0000)\b, но\color=(#00ff00)

color(..), или color=(..), или оба?
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
$ php markup.php
1: 0,00154280662537
10: 0,0104448795319
100: 0,296799898148
500: 6,37055897713
1000: 24,2174150944

code text
  1. Мама \bмыла\i раму\color(#ff0000)\b, но\color(#00ff00)\i я б её \iлучше\color покрасил.

превращается в

code html4strict
  1. Мама <b>мыла<i> раму</i></b><span style="color:#ff0000"><i>, но</i><span style="color:#00ff00"> я б её <i>лучше</i></span><i> покрасил.</i></span>


Мама мыла раму, но я б её лучше покрасил.
 
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Татарин> А что будет результатом в этих двух случаях?
Татарин> \color(#000000)Текст1 \b\i Текст2 \color\b\i Текст3

<span style="color:#000000">Текст1 <b><i> Текст2 </i></b></span> Текст3

Текст1 Текст2 Текст3
 


Татарин> \b\i Текст3\color(#000000)Текст1 \b\i Текст2 \color

code html4strict
  1. <b><i> Текст3<span style="color:#000000">Текст1 </span></i></b><span style="color:#000000"> Текст2 </span>


Текст3Текст1 Текст2
 


Татарин> И ты отдаёшь color'y какое-то предпочтение перед "мелкими" тегами?

При парсинге - нет, при чистке лишних тэгов (у меня это делается в два регекспа по готовому результату парсинга) - да.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Лови временный тэг [test090413]...[/test090413]

;)

[test090413]
\btest\b \color(#008800)green
[/test090413]
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Сергей-4030> Так? Я правильно понял задачку?

В валидном HTML не должно быть «пересечений» тэгов. Т.е. конструкции вида
code html4strict
  1. <b>...<i>...</b>...</i>

запрещены (хотя браузерами всеми популярными всё равно как надо отобразятся).

Так что, ты всё правильно понял, нужно перед закрытием внешнего тэга закрыть незаконченный внутренний, а потом вернуть его:

code html4strict
  1. <b>...<i>...</i></b><i>...</i>


Но в случае варианта, типа:

code html4strict
  1. <b><i>...</i></b><i>...</i>


можно поменять начальные тэги местами:

code html4strict
  1. <i><b>...</b>...</i>


Вот в этом и стоит главная трудность сабжевой задачи.

Я решил её не совсем честно :) Но, вроде, на всём, что тестировал, работает. Хотя гарантировать работу в любых случаях я не могу.

Татарин, вон, судя по всему, решил честно, но получил совершенно ужасный N+N*N! :) (если я правильно понимаю факториал квадрата).
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Вот и математики подошли... :)

...

Я решал тупо, конечными автоматами.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Серокой> А как узнать, какой процесс держит файл? У меня при попытке удаления - "нарушение совместного доступа"...

lsof | grep имя_файла

;)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Balancer

администратор
★★★★★
Серокой> (Это Cygwin, да ;) )

Ну, кто ж доктор :)

...

А так - интересно, м.б. что-то такое в PowerShell появилось. Раз там даже man'ы есть нынче :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru