Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 25, 2024 06:08

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 02:17 
Задача: решить типовую задачу "перевозки": "волк-коза-капуста", "3миссионера-3каннибала", "help-to-sail".
Алгоритм решения (можно предложить свой):
1) Начальная ситуация описывается кадром стека (удобнее, конечно, шкалой, но тогда не нужны стековые манипуляторы) - для каждого персонажа (и лодки), по одному значению-состоянию (левый/правый берег);
2) Верхний кадр стека проверяется на условие победы (все на правом берегу), в случае успеха - конец;
3) Верхний кадр стека проверяется на недопустимость (волк ест козу, каннибалы - миссионеров и ть.д.), в случае успеха - кадр удаляется со стека и возвращаемся к шагу 2;
4) Верхний кадр стека заменяется последовательностью кадров, которые из него можно получить при очередном перемещении лодки. Возвращаемся к шагу 2.
Т.к. все три задачи решаемые, стек исчерпаться не должен.
Вывод программы - протокол кадров и принятых по ним решений, в идеале - только продуктивные перемещения персонажей. Продумать, как избежать зацикливания алгоритма.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 04:30 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
А ЗАЧЕМ в условии задачи предложение алгоритма (да еще и абсолютно непонятного из-за масляного масла!) ???

Решение задачи - тупое удаление со стека всех данных и заполнение его нужным ответом.
Никакого зацикливания - идеально быстрое, предопределенное решение.
Ответ то известен изначально!

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 06:17 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
У меня где то было на кварке.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 10:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
WingLion писал(а):
А ЗАЧЕМ в условии задачи предложение алгоритма (да еще и абсолютно непонятного из-за масляного масла!) ???

Вообще-то без алгоритма начинать кодировать задачу не стоит. :)
А алгоритм это последовательность корректных действий(не противоречащих условию задачки).
Решение на форте.
Код:
\                      1    2       3          4    5       5    1    2       3          4
: волк-коза-капуста ( волк капуста крестьянин коза река -- река волк капуста крестьянин коза )
  -rot
  >r swap r>
  >r -rot r>
  2swap
  >r 2swap swap r>
  2>r swap 2r>
  2>r >r swap r> -rot 2r> 2swap ;
На форте, расширенном манипуляторами
Код:
\                      1    2       3          4    5       5    1    2       3          4
: волк-коза-капуста ( волк капуста крестьянин коза река -- река волк капуста крестьянин коза )
  3\312
  3\213
  4\3124
  4\3412
  5\34215
  4\2134
  5\34521 ;

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 12:45 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
chess писал(а):
Решение на форте.
Код:
\                      1    2       3          4    5       5    1    2       3          4
: волк-коза-капуста ( волк капуста крестьянин коза река -- река волк капуста крестьянин коза )
  -rot
  >r swap r>
  >r -rot r>
  2swap
  >r 2swap swap r>
  2>r swap 2r>
  2>r >r swap r> -rot 2r> 2swap ;



А Forth Wizard запускать не пробовали?

: solution ( 12345 - 51234) -rot 2>r -rot 2r> ;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 12:53 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
true-grue писал(а):
А Forth Wizard запускать не пробовали?

: solution ( 12345 - 51234) -rot 2>r -rot 2r> ;

В этом смысле все гораздо проще:
: solution ( 12345 - 51234) 5\51234 ; 1 2 3 4 5 solution ( 5 1 2 3 4 )

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 13:10 
WingLion писал(а):
А ЗАЧЕМ в условии задачи предложение алгоритма (да еще и абсолютно непонятного из-за масляного масла!) ???
А затем, что нас интересует не запись в виде стек-перестановок готового решения задачи, а написание программы, способной решить задачу! Хотите использовать свой алгоритм - пожалуйста! Но не надо считать решением выдачу текстового сообщения "Задача решена!", что мы и имеем в данном случае.
P.S. Откуда берется зацикливание? Допустим, мы имеем ситуацию 1 (которая допустима, но лежит на тупиковом пути), она заменяется на список ситуаций 2, 3 и т.д. Но, ведь, например, ситуация 2 порождает ту же 1 (движения лодки обратимы), и после того, как мы дойдем до тупика, так и будем мотаться в цикле 1-2-1-2-...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 14:37 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
gudleifr писал(а):
P.S. Откуда берется зацикливание? Допустим, мы имеем ситуацию 1 (которая допустима, но лежит на тупиковом пути), она заменяется на список ситуаций 2, 3 и т.д. Но, ведь, например, ситуация 2 порождает ту же 1 (движения лодки обратимы), и после того, как мы дойдем до тупика, так и будем мотаться в цикле 1-2-1-2-...

Зацикливание исключается при введении эвристики "забрать другой объект" на обратном пути. Это элемент алгоритма поиска решения.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 14:44 
chess писал(а):
Зацикливание исключается при введении эвристики "забрать другой объект" на обратном пути.
1-2-1-2-1 исключается, а 1-2-3-4-1-2-3-4-1 ?
chess писал(а):
Это элемент алгоритма поиска решения.
Пожалуйста, поменьше эвристик и побольше поиска решений.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 15:10 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
gudleifr писал(а):
А затем, что нас интересует не запись в виде стек-перестановок готового решения задачи, а написание программы, способной решить задачу!

программы, способной из начальных условий путем перебора найти алгоритм перемещений

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

найти последовательность действий, которые оставляют несъеденной козу


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 15:17 
вопрос писал(а):
дано - количество предметов, вместимость транспортного средства, "сочетаемость", точнее - несочетаемость предметов...
Мне показалось, что правила "сочетаемости" и "грузовместимости" вполне описываются стековыми манипуляторами. Может, я не прав?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 15:21 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
на прологе довольно быстро
состояние(СПИСОК1, /* это пока левый берег */
СПИСОК2 /* лодка */
СПИСОК3 /* правый берег */
)
запрет(СПИСОК):- member(КРЕСТЬЯНИН, СПИСОК), ! /* если хозяин тут - сочетание любое */
;
( member(коза,СПИСОК), member(волк,СПИСОК) -> fail )
;
( member(капуста, СПИСОК), member(коза, СПИСОК) -> fail ).

etc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Пн фев 13, 2012 15:48 
Быстро и без Пролога. Для подсказки покажу на шкалах (Help the Sail - шкала ЛПССМДДКБ, 1 - на левом берегу, 0 - на правом, х - безразлично):
Начало: 111111111
Победа: x00000000
Запрещенная комбинация: х01х1хххх
Перевозка: 111111111 -> 000111111 001101111 001111101 и т.д.
(Пардон, выше я неправильно написал название игры.)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Вт фев 14, 2012 12:44 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
gudleifr писал(а):
Help the Sail - шкала ЛПССМДДКБ

Не понял что это за шкала. И что, использование шкалы позволит найти все решения( для задачи их два)?
Решил по-своему( этап отбора корректных начальных ходов опустил):
Код:
: solution  \ 1 - волк 2 - коза 4 - капуста
s.( 6 .SN CR )
act( 6\45^`3=45^`6=|~i612345e153426t s. 6|456^^`7= )
job( 0 0 0 s. 0\B act 0\U CR 6\ )
1 4 2 job
4 1 2 job ;
sol

лог.
Код:
1 4 2 0 0 0
0 1 4 2 0 0
0 0 1 4 2 0
0 2 1 4 0 0
0 0 2 1 4 0
0 0 0 2 1 4

4 1 2 0 0 0
0 4 1 2 0 0
0 0 4 1 2 0
0 2 4 1 0 0
0 0 2 4 1 0
0 0 0 2 4 1


Ok

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: тест стековых манипуляторов
СообщениеДобавлено: Вт фев 14, 2012 12:55 
chess писал(а):
Не понял что это за шкала [ЛПССМДДКБ].
В флеш-игре-загадке надо перевести на Лодке Папу, 2-х Сыновей, Маму, 2-х Дочек, Копа и Бандита. Т.о. состояние игры описывается шкалой из 9-бит.
chess писал(а):
И что использование шкалы позволит найти все решения( для задачи их два)?
1)Использование шкалы - это лишь техническая подробность решения (способ представления данных).
2)Т.к. описанный алгоритм останавливается после нахождения первого же решения, то очевидно, он ищет только одно.
chess писал(а):
Решил по-своему...
Надо, чтобы программа задачу решила, а не Вы.


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB