[конкурс]Давайте поиграем!

Обсуждение проектов наших жителей.
Вы можете выставить проект на тест или найти помощников для его реализации.

Модератор: BV

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

[конкурс]Давайте поиграем!

Сообщение ANDLL » 26.12.2006 (Вт) 19:40

Итак, мы будем играть в игру которая называется "найди путь к предмету".


Как устроен мир
Весь мир представляет собой матрицу из клеточек. Каждая клеточка имеет характеристику, "трение" - это время, которое требуется на ее прохождение.
На карте есть два элемента - "собачка" и "цель". Игра заканчивается когда собачка достигает цели. Выходить за приделы поля не разрешается.
Цель игры - вывести собачку к цели за минимальное игровое время. Иными словами надо выбрать путь с наименьшим трением.


Что будем делать
Ваша задача написать компонент "щенок" который будет реализовывать алгоритм поиска оптимального пути.
Фактически вы будете писать класс, который будет иметь два метода
1) Initialize - для "инициализации" щенка, в этом методе "щенок" получит указатель на класс-карту.
2) GoNext - эта функция возвращает одно из девяти значений:
Код: Выделить всё
NW N NE
W NOP E
SW S SE

Это значение указывает, соответсвенно, куда должен пойти щенок на этом ходу.
Если ваш класс возвращает недопустимое значение(например если он прикажет двигаться влево, в то время, как щенок находится у левого края поля), игра заканчивается поражением.
Время, которое требуется классу для "раздумий" вообще говоря не ограничевается, важно лишь найти наиболее оптимальный алгоритм.


Где храняться карты?
Карты храняться в XML-файлах, лежащих в папке с программой. Схема для этих xml лежит в той же папке.


Как запустить программу?
Программа запускается с такими параметрами:
Код: Выделить всё
project1.exe class_name map_name

где class_name - имя(ProgID) класса c вашим "щенком", map_name - имя карты, без пути и разширения.
Например, "тестовый щенок" на карте map1 запускается так:
Код: Выделить всё
project1.exe SamplePuppy.puppy map1

В конце игры программа показывает "время", которое потребовалось щенку для достижения цели.


Что может и знает щенок?
Для щенка доступен класс Enviroment с классом Island, который предоставляет следующую информацию:
1) Положение цели(свойства TargetX и TargetY)
2) Текущее положение щенка(свойства CurrentX и CurrentY)
3) Размер карты(свойства SizeX и SizeY)
4) Объект ICell с координатами (X,Y)
Объект ICell хранит в себе информацию о клетке:
1) Ее трение (свойство Friction)
Наша программа вызывает функцию GoNext щенка, которая должна вернуть направление, в котором наша программа должна его передвинуть.


Как будут определяться победители?
Будет подготовлено 10 карт(заранее неизвестных), "время", потраченное на прохождение каждой карты будет сложено и места распределены в соответствии со значением этой суммы.
Если щенок заваливает хоть один тест, он снимается с конкурса.

Ограничения на ресурсы
Позже я определю, какие ограничения на потребляемые ресурсы следует наложить на программу. Но, скорее всего, это будут крайне мягкие условия, например не более 10 минут на моем компьютере(Athlon 2 Ггц) на одну карту и не более 50 Мбайт ОЗУ.
Возможно, позже я поменяю условия, но тем не менее дух конкурса в том что бы написать наиболее оптимальный алгоритм, по времени "преодоления препятствий" а не по времени выполнения на процессоре.


Как тестировать?
В момент тестирования будут периодически публиковаться карты для проверки вашего "робота". Из этих карт 8 карт будут более или менее похожи на финальные карты. Кроме того в финале будут еще две "абсурдные" карты призванные проверить, насколько рационально ведет себя ваш алгоритм в "необычных" условиях.
Так же вы можете написать свои карты, если хоть немного владеете XML. Для редактирования карт можно порекомендовать следующие программы:
1) Visual Studio 2005\2003
2) Atlova XMLSpy
3) Microsoft Word
4) любой другой редактор plain или xml текста


Пример
В файле-вложении есть папка SamplePuppy с примером программы которую вам предстоит написать, написанной на VB6. Запустить щенка можно легко, нажав F5 в среде разработки.
SamplePuppy представляет собой совершенно очевидную и "топорную" реализацию алгоритма, которая просто тупо движеться к цели, не обращая внимание на трение.

ВНИМАНИЕ. Перед тестированием запустите один раз project1.exe для его регистрации.


На каком языке я могу это написать?
На любом языке, который поддерживает COM и позволяет создавать COM-библиотеки. Например, VB6, VB2005, C++, C#, Delphi и многие другие.
Совершенно неважно, на каком языке вы будете писать, так как быстродействие самого языка роли в нашем конкурсе не играет.


Если вы хотите приянть участие
Обязательно отметьтесь в личке, что бы я знал, имеет ли смысл писать тестовые карты и вообще продолжать конкурс.


Если же у вас есть предложение, замечание или еще что-то
Иными словами если у вас есть что сказать кроме "я учавствую", пишите в топике.

Скачать пример, две маленькие карты и EXE-файл с программой можно здесь: (url)

P.S. Для запуска примера запустите один раз project1.exe для регистрации, затем откройте проект samplepuppy и нажмите f5
Последний раз редактировалось ANDLL 26.12.2006 (Вт) 20:36, всего редактировалось 1 раз.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 26.12.2006 (Вт) 20:00

Хех, ну намудрил :)
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 26.12.2006 (Вт) 21:25

Размеры карты ограничены?
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 26.12.2006 (Вт) 21:54

keks-n
Пусть будет максимум 100x100
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.12.2006 (Вт) 22:22

Я ничего не понял.
Вся карта мне известна?
Значит, если я тупо возьму и вобью алгоритм Дейкстры, то я гарантированно выигрываю?
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 26.12.2006 (Вт) 22:44

Хм. А сколько этот алгоритм будет думать над средней сложности картой размером 100x100?

P.S. В архив был так же добавлен пример на C++
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 26.12.2006 (Вт) 22:53

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

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.12.2006 (Вт) 22:59

ANDLL писал(а):Хм. А сколько этот алгоритм будет думать над средней сложности картой размером 100x100?

Там сложность O(n^2) от числа вершин. Значит, 100 млн. операций. В 10 мин. уложится с большим запасом. Давай какую-нибудь карту 100х100, проверим ;-)

2keks-n: возможных путей в карте 100x100 порядка (100х100)!
Представь себе, сколько это, если 70! ~ 10^100.
Солнце раньше догорит, чем ты их все переберёшь ;-)
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 26.12.2006 (Вт) 23:08

Уже понялъ. Когда через 10 минут не продвинулось и процента... А карта 10x10
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 26.12.2006 (Вт) 23:20

Последний раз редактировалось ANDLL 26.12.2006 (Вт) 23:40, всего редактировалось 1 раз.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.12.2006 (Вт) 23:30

404
[edit]телепатически понял, что имелось в виду http://danasoft.ws/etc/MovieAlgoEx.zip [/edit]
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.12.2006 (Вт) 23:46

ANDLL писал(а):
Код: Выделить всё
Private Property Get IIsland_SizeX() As Long
    IIsland_SizeX = mCurrentX
End Property
Private Property Get IIsland_SizeY() As Long
    IIsland_SizeY = mCurrentY
End Property

Низачот!

Кроме того, что я исправлю это, я ещё перенесу вызов mPuppy.Initialize mEnviron на после загрузки карты. Мне так удобнее ;-)
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 26.12.2006 (Вт) 23:50

Низачот!
Писалось второпях
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.12.2006 (Ср) 1:15

Эх, ладно. Вот вам мой Дейкстра, заодно с поправленным по моему вкусу пускачом; а я пошёл спать.
Скомпиленный, для предложенной карты 100х100 он работает за секунду.
У вас нет доступа для просмотра вложений в этом сообщении.
Изображение

zan
Бывалый
Бывалый
 
Сообщения: 224
Зарегистрирован: 24.08.2006 (Чт) 4:55

Сообщение zan » 27.12.2006 (Ср) 5:36

tyomitch, задушил все начинания на корню :D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2006 (Ср) 8:24

Сделать, что карта неизвестна, и ввести метод Радар :)
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.12.2006 (Ср) 10:06

А что, почётного приза, как единственному не прогулявшему курс дискретной оптимизации, мне не будет? :-D

С радаром, кстати, ничего не изменится. Отрадарю всю карту, и получится исходная задача.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2006 (Ср) 10:31

Если функция радара будет действовать не на всю карту, а на несколько ячеек и занимать много времени, то тут уже будет место для творчества исходя из неполных данных.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.12.2006 (Ср) 10:36

Гм, интересно. И что ты предлагаешь? Сделать, чтобы слепой щенок, не тратящий время на радар, обгонял Дейкстру с радаром? А зачем?

[add]
Можете вырвать из контекста и постить в цитаты: "слепой щенок обгоняет Дейкстру с радаром" :lol:
[/add]
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 27.12.2006 (Ср) 13:09

Может быть, Темыч, тебе новый статус выдать? ;)

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.12.2006 (Ср) 14:43

Гы. Артём молодец конечно, правда, про алгоритм Дейкстры я раньше не знал. И как следствие, просто не знал, что существует "стандартное" решение этого вопроса.
OK, давайте поменяем условие?
Что если поле переменное, причем у каждой клеточки "трение" меняется по простому(для начала) линейному закону:
x(n)=(x(n-1)+k) mod 10
Где k у каждой клетки свой(разумеется известный)
Очевидно, что алгоритм Дейкстры тут не будет оптимальным, и, вероятно, в некоторых случаях он даже не приведет ни к какому результату.
Такая игра будет интереснее?
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2006 (Ср) 15:00

Нет, тоже самое.
Ты пытаешься придумать CoreWar :)
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.12.2006 (Ср) 15:26

Amed писал(а):Может быть, Темыч, тебе новый статус выдать? ;)

Ага, "Дискретный оптимизатор" :-)


2ANDLL: а почему бы, действительно, не сыграть в CoreWars всем форумом? Правила, опять же, придумывать на пустом месте не придётся. Среды тоже готовые есть.
Изображение

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 27.12.2006 (Ср) 16:03

Стандартный вопрос, зачем писать чтото новое если есть доброе старое?
Что бы было лучше. Что бы было интересно. Что бы было чтото другое
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.12.2006 (Ср) 19:11

ANDLL писал(а):Что бы было интересно.

Вынужден признать, что лично мне гонять щенка по линейно меняющемуся полю нисколько не интересно. Не знаю, как остальным.
Изображение

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 28.12.2006 (Чт) 2:10

Точно, CoreWars! ANDLL, это я тебе тогда про CoreWars и говорил :)

ANDLL писал(а):Такая игра будет интереснее?


Нет. Возьми идею CoreWars.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.12.2006 (Чт) 10:10

tyomitch писал(а):а почему бы, действительно, не сыграть в CoreWars всем форумом? Правила, опять же, придумывать на пустом месте не придётся. Среды тоже готовые есть.

Ну... Как бы так сказать.
Нет там удобной среды :)
Такой, чтобы полноценная IDE была -- в одном месте можно было и писать, и отлаживать, и результат наблюдать.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 28.12.2006 (Чт) 10:22

Лет 5 назад была игра на .net, названия которой не помню. Игра представляла собой некое поле, на котором росли растения и бегали травоядные и хищники. Травоядные и хищники - программные модули. Цель у первых - выжить в условиях охоты на них и по возможности вытеснить остальные виды травоядных, у вторых в целом похоже.

Можно реанимировать эту штуку. Или сделать что-то похожее.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.12.2006 (Чт) 10:45

Баян :)
Выигрывали всегда коровы, которые действовали по довольно простому алгоритму, имитирующему стадный инстинкт.
Lasciate ogni speranza, voi ch'entrate.

zan
Бывалый
Бывалый
 
Сообщения: 224
Зарегистрирован: 24.08.2006 (Чт) 4:55

Сообщение zan » 28.12.2006 (Чт) 11:00

tyomitch'a в танк, охранять флаг :)
За Core буду охотно наблюдать, но не участвовать :)

След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

    TopList