|
|
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Привет народ, мозгами поскрипеть еще хотите! Тады вот задачка такая написать функцию - что то типа bool MyFunc(char *src, char *sub) Которая делает следующее - берет src и ищет в нем sub если находит хотя бы одно вхождение - говорит true, если нет то false. Можно еще усложнить но это потом ... Сразу говорю, я лабы не решаю слава богу отрешался в свое время и ничего не использую в личных целях, просто интересно пообщаться с умными людьми может чему научиться и посмотреть кто круче - не меня конкретно, а в целом! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 10:47 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Топик не очень интересен ИМХО. Есть канонические алгоритмы Кнута-Морриса-Пратта. Они достаточно эффективны для общих случаев поиска. Может предложишь более интересную тему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 12:00 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Действительно, не особо интересно. Вот другие задачки : itoa без умножения ( и масивов !) подсчет числа "счастливых" билетов (000000 - 999999 где сумма первых 3х цифр равна сумме 3х последних наиболее красивое разделение строки на токены (подстроки, разделенные символами из указанного набора). Учитывается вся организация API. сравнение строки с шаблоном (*? в дос или % в SQL). Есть много тонких моментов, например шаблоны вида **???**?* тоже должны корректно обрабатываться. Washington Irving ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 14:47 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Есть более интересная задача. Для любителей игровых алгоритмов. 1) Дано квадратное поле с препятствивиями 200х200 ячеек (задано в виде булевого массива). Каждая ячейка может быть свободной - 0 или занятой препятствием - 1. Реализовать алгоритм поиска краткого (или кратчайшего) маршрута по свободным полям из заданной точки (x1,y1) в другую точку (x2,y2). 2) Алгоритм должен предусматривать защиту от зацикливаний, блужданий и погружений в бесконечные рекурсии 3) Не приветствуются тривиальные решения вроде - генерация полной таблицы путей из каждой точки в каждую. 4) Приветствуется использование мультизадачности, нечетких алгоритмов и т.п. 5) Заранее известно что поле (карта) может быть нескольких типов. - лес - город - подземелье - горы Исходя из характера и рода препятствий на карте, алгоритм можно "подстраивать" для достижения лучшей производительности. Ввиду особенностей карт нельзя выбрать "супер-алгоритм-одного-умного-дядки". Карта город потребует подхода, отличного от карты лес и т.п. 6) Критерием качества алгоритма считается минимальное время поиска маршрута и минимизация длины самого маршрута (в ячейках). Задача ВСЕГДА востребована на рынке игровых алгоритмов для RTS/RPG игр. Предлагаю принять участие всем кто желает. С уважением Mayton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 15:57 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
3) Не приветствуются тривиальные решения вроде - генерация полной таблицы путей из каждой точки в каждую. Применение известных алгоритмов, например, A*, значит, не приветствуется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 16:29 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Нет. Вы не так поняли. Не приветствуются решения требующие полного перебора исходных данных с занесением их в базу готовых решений. Возможно в этом случае время отклика от алгоритма будет минимальным, однако такой подход будет не гибок для игровых алгоритмов в целом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 16:35 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
2 Mayton: Существует задача о шахматном короле -- дана целочисленная положительная матрица размера n*m, на ней заданы две точки -- начальная и конечная, шахматному королю необходимо пройти из начальной точки в конечную, собрав минимальную (максимальную) сумму на пути. Мне кажется, что ваша задача является частным случаем вышеописанной. Или по крайней мере может быть сведена к ней (допустим наличие пути между точками вашей матрицы можно задать как нулевую сумму на пути) Задача универсально решается с помощью динамического программирования с полиномиальной сложностью вычислений. Если интересно, у меня где-то было решение, может не самое оптимальное, могу выложить. ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 18:11 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
2 Lelikk Отлично. Публикуйте ссылки на исходники. Буду смотреть. Меня особо интересуют более сложные задачи. - Движение по "полупроходимой" местности. - Движение в условиях изменяющегося ландшафта. - Планирование движения групп. Роевый интеллект (swarm intelligence) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2005, 18:25 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Код написан довольно давно, поэтому могут быть всякие нестыковки Код: plaintext 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 13:07 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
mayton2 Lelikk Отлично. Публикуйте ссылки на исходники. Буду смотреть. Меня особо интересуют более сложные задачи. - Движение по "полупроходимой" местности. - Движение в условиях изменяющегося ландшафта. - Планирование движения групп. Роевый интеллект (swarm intelligence) 1)Что такое полупроходимая местность? 2)Как меняется ландшафт (что это в реальности)? 3) Вы говорите про что-то подобное "алгоритмам муравья"? Марко Дориго он же М. Тим Джонс "Программирование искусственного интеллекта в приложениях" ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 13:18 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Lelikk 1)Что такое полупроходимая местность? Ну ... если обобщать задачу поиска маршрута то можно задатся такими исходными условиями: каждая ячейка имеет коэффициент проходимости (вещественное число [0..1] ) В игровых алгоритмах такие ячейки - это труднопроходимая местность (болота, пески и т.п) 2)Как меняется ландшафт (что это в реальности)? В реальности это выглядит так. Персонажи стратегической игры строят канал. Или прокладывают путь через горы. 3) Вы говорите про что-то подобное "алгоритмам муравья"? Марко Дориго он же М. Тим Джонс "Программирование искусственного интеллекта в приложениях" Ммм... да. Хотя ссылка мне неизвестна. Спасибо. Почитаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:16 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
mayton Lelikk 1)Что такое полупроходимая местность? Ну ... если обобщать задачу поиска маршрута то можно задатся такими исходными условиями: каждая ячейка имеет коэффициент проходимости (вещественное число [0..1] ) В игровых алгоритмах такие ячейки - это труднопроходимая местность (болота, пески и т.п) В приведенных вами условиях задача решается вышеприведнным мною кодом (весовые коэффициенты тока преобразовать надо). А про ландшафт я все-таки не понял: как-то расплывчато все получается -- что ищем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:28 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
А че вдруг ударились в игровые алгоритмы? Кстати, алгоритм А* применим только для 2.5 мерных игр. В шутерах, например, задача поиска оптимального пути нормально не решена. Те решения, которые имеются в наличии настолько дырявы и требуют такого количества костылей, что говорить о том что есть эффективный алго для трехмерных пространств - это не понимать сути проблемы. Можете подумать на досуге. Задача вобчем проста. Есть произвольное 3Д пространство, на нем присутсвуют средства передвижения, телепорты, лифты, джамп-пады, горизонтальные передвижные платформы. Есть препятсвия, в виде столбов, по которым надо прыгать, в виде лавы, в виде воды, в виде радиоктивной жидкости. На уровене есть лестницы, ледовые поверхности, то есть места, где скорость объекта отлична от обычной. Есть места "продуваемые" ветром. Вот. Это не надуманные условия. С этим приходится иметь дело в шутерах. Я причем назвал не все условия. Есть еще триксы. Но о них умолчим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 14:36 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
dwlА че вдруг ударились в игровые алгоритмы? Кстати, алгоритм А* применим только для 2.5 мерных игр. В шутерах, например, задача поиска оптимального пути нормально не решена. Те решения, которые имеются в наличии настолько дырявы и требуют такого количества костылей, что говорить о том что есть эффективный алго для трехмерных пространств - это не понимать сути проблемы. Можете подумать на досуге. Задача вобчем проста. Есть произвольное 3Д пространство, на нем присутсвуют средства передвижения, телепорты, лифты, джамп-пады, горизонтальные передвижные платформы. Есть препятсвия, в виде столбов, по которым надо прыгать, в виде лавы, в виде воды, в виде радиоктивной жидкости. На уровене есть лестницы, ледовые поверхности, то есть места, где скорость объекта отлична от обычной. Есть места "продуваемые" ветром. Вот. Это не надуманные условия. С этим приходится иметь дело в шутерах. Я причем назвал не все условия. Есть еще триксы. Но о них умолчим. Хорошо, но в начале нужно математически формализовать задачу. То что вы описали, ей поддается плохо, и вот почему: 1) Непонятно, какую функцию пути мы оптимизируем? Оптимальный путь, он оптимален по времени преодоления или по затратам ресурсов или еще по чему-то? 2) Вы привели кучу условий, одни из которых однотипны: лестницы и лифты, лава и вода, другие наоборот не вписываются никуда: что за маста с особой скоростью -- ведь это естественно, что на различных местах она и так разная 3) Раз 3D, то надо формализовать данные в численную 3D карту и обрабатывать ее. Это конечно все очень упрощенно, работы тут чертова прорва, но для каждой конкретной задачи можно попытаться отыскать приемленый алгоритм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 15:00 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Господа Lelikk и dwl. Предлагаю рассмотреть самую первую постановку (мой пост №2 в топике). То, что предлагает dwl настолько масштабно, что требует создания отдельного форума по гейм-разработкам. Я же предлагаю рассмотреть различные подходы к решению проблемы движения в лабиринте. (Lelikk с вашим исходником я ознакомлюсь как только будет время). Данный алгоритм можно реализовать в виде модуля на любом ЯП (для начала), обсудить в форуме и выполнить серию тестов на выявление наиболее удачных реализаций. Критерии качества я уже называл выше. Параметры алгоритма: - собственно поле (карта) (булева матрица) - начальное положение персонажа (x1,y1) - целевая точка (x2,y2) Отвечаю на вопрос заданный Lelikk. А про ландшафт я все-таки не понял: как-то расплывчато все получается -- что ищем? Ищем как я и говорил, один из множества коротких путей за короткое время. В случае с изменяющимся ландшафтом можно сказать - это работа данного алгоритма в "динамике". То есть Дополнение к алгоритму №1 1) Вычисляется путь с помощью алгоритма №1. Путь фиксируется с виде списка клеток (ячеек) 2) Персонаж (шахматный король) начинает движение по заданному пути с заданной скоростью 3) Известно что некоторые ячейки случайным образом (в случайный момент времени) могут изменить свое состояние (0 -> 1 ->0). При этом персонаж может оказатся в состоянии когда найденный путь пересекает препятствие. Требуется либо выполнить пункт (1), либо внести корректировки в путь. 4) Продолжить движение (переход на пункт (2)) Параметрами "динамического" алгоритма будут являтся. - скорость движения персонажа (unitSpeed) (ячеек/сек) - вероятность наступления события "смена ячейки в ландшафте" (onLandScapeChange) (событий/сек) Ну.. в общем-то все. Коллеги. Готов выслушать любые предложения по реализации и тестированию. От себя предлагаю для начала создать "cреду тестирования" - некий вариант оконного приложения с возможностью загрузки в него модулией игровых алгоритмов (плагинов), карт местности, с целью анализа и тестирования различных движков и алгоритмов. Интерфейсы и базовые классы - выносятся на открытое обсуждение. С уважением mayton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 16:11 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Lelikk С задачкой этой я столкнулся когда работал с движком Quake3. Карты там представлены в формате BSP-графа. Нахождение оптимального пути - это написание функции BotMoveToRoute( Bot, goal ) . Сейчас ситуация такая, что критейри всегда один - время. Хотя это неверно. Потому что если бот(робот) "отступает", то ему надо искать безопасный путь, а не короткий. А в понятия безопасности уже входят "закрытость" пути от глаз врага,и "шумность". Когда идешь по воде - издаются звуки, когда по леснице тоже, когда через телепорт - звук телепорта. И т.д. Стандартно все пашет так, после сборки карты и построения BSP дерева, происходит формирование "путей". Формируются они просто, карта бъется на прямоугольные участки именуемые областями. Вернее бъется сначала на группы областейнаходящиеся на одном "уровне" (разброс Z координаты - высота прыжка игрока). Считается "время" перехода между ними, для этого сначала нужно определить места перехода. Это кстати очень узкое место этого алго, потому что ищет он не больше 4 точек соединения групп областей. Соединения ищутся от BSP объектов карты - порталы, двери, лифты, лестницы, джамппады, кнопки. Время перехода сохраняется. Далее группа областей делится на прямоугльные участки, это как разбиение траингуляция, только прямоугольниками как в NV1. Далее исключаются прямоугольники недоступные боту (космос, лава и т.д., стены). Дальше мне совсем было не понятно, но почему-то для каждого прямоугоьлника определятся только ТРИ соседа - по минимальному расстоянию между центрами скорее всего(наверное чтобы исключить зациклинность). Далее делается допущение, что из любой прямоугльной области он может идти в соседнюю ПРЯМО, взяв направление на центр. Там есть еще вариант оптимизации вектора направления, но я не буду его описывать - это все усложнит. Время внутри области считается как обычная задачка равномерного движения. Потом отрезки кидаются в список, а время суммируется по списку - достигаешь виршины - удаляешь елемент списка - минус время. И т.д. Алго ужасен. Например самый первый недостаток, который можно увидеть - то что края области прямоугольной могут лежать в "плохом" месте, например в лаве или стене. И очень часто можно видеть, как боты сами заходят в лаву или прижимаются к стене и скользят по ней. Есть и другие фишки в виде застревания, в виде мертвых областей - зайти может а выйти нет. Даже пределывание костылей ввиде невидимыйх поверхностей, по которым может ходить только бот, не сильно спасает ситуацию, потому что перепрыгивать длинные ямы они до сих пор не научились. Это я все говорил о стандартном алго. Канеш кое что удалось сделать некоторым отдельным личностям, в том числе и нам с другом. Но все равно, как не крути, решение требуется ПРИНЦИПИАЛЬНО ДРУГОЕ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 17:28 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
dwl С задачкой этой я столкнулся когда работал с движком Quake3. В чем заключалась эта работа? Если не секрет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2005, 19:12 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
Это была не работа, а скорее увлечение. Ищи в гугле слово spiterbot. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 08:25 |
|
||
|
Ышо один конкурс на лучшую и элегантную функцию поиска подстроки!
|
|||
|---|---|---|---|
|
#18+
А алгоритм Дейкстры ? ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2005, 08:54 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32963976&tid=2033597]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
90ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 475ms |

| 0 / 0 |
