|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|
Робот, сажающий грядки21.12.2017, 23:18. Показов 8613. Ответов 19
Метки нет (Все метки)
Есть такая среда "Исполнители", написанная питерским учителем. Там встроена черепашка, рисовалка и робот - вспомогательные инструменты для обучения новичков алгоритмизации. Также есть билингвальный интерпретатор кода, отдаленно похожий на си.
Так вот, задали подруге задачку, чтобы робот мог пройти карту из минимум 5 грядок и 6 стен (минимальное поле в программе 10x10), посадив всё грядки и вернувшись на базу. Фишка в том, что робот должен это сделать из любой точки на карте, с любого поворота. Высший пилотаж - написать такого робота, который сможет произвольный лабиринт обходить из любой точки. Робот плохо умеет ориентироваться в пространстве. Он лишь "видит" что по 4м соседним кледкам от него - препятствие/клумба/пустота. И что под ним - грядка или база. Умеет вращаться на 90/180 и ходить вперед-назад (это для тех, кто не знаком или не планирует знакомиться со средой) Если робот сориентирован строго на север, то написать алгоритм для обхода несложного "лабиринта" довольно легко. А вот когда его начинают располагать произвольно повернув, появляются проблемы. Мне стыдно, что я, пусть и давно, окончил матфак и прикладную информатику, но такая программа поставила меня в тупик. Если кто-то готов поделиться идеями и/или наработками, буду душевно признателен
0
|
|
| 21.12.2017, 23:18 | |
|
Ответы с готовыми решениями:
19
Робот сажающий грядки. Минимум кода! Сколько дачников приземлится на свои грядки? Записи с вариантами: Вычислить средний вес урожая с грядки для каждого дачника |
| 21.12.2017, 23:26 | |
|
0
|
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||
| 21.12.2017, 23:38 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|
| 21.12.2017, 23:43 [ТС] | |
|
Не по теме: А в чем сломанное радио? Задачу я пересказал в целости. Решать её буду я. Мог бы и не рассказывать это отступление от темы, но кому-то показалось бы странным, что раньше человек спрашивал про delphi, а теперь спрашивает про практически школьную среду. Или подумали бы, что решаю задачу за деньги. Shamil1, среда не позволяет вращать лабиринт. Он рисуется на отдельном поле. [img]https://i.**********/ZN5cBLe.png[/img]
0
|
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||
| 22.12.2017, 01:17 | ||
|
0
|
||
|
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
|
|
| 22.12.2017, 01:28 | |
|
В приведенном на рисунке лабиринте можно сориентироваться следующим образом:
- двигаясь по диагонали "вперед и вправо" дойти до угла, это возможно, т.к. стены не образуют тупиковых и угловых карманов ни в одном направлении. Т.е. пока впереди не стена и свободно, двигаемся вперед, как только дошли до стены или конца доски, поворачиваем вправо и двигаемся вперед, когда дошли до следующей стены, поворачиваем влево, потом опять вправо и т.д. пока не окажемся в углу. - двигаемся вдоль края доски до стены или следующего угла - если дошли до края не встретив стены, двигаемся вдоль следующего края - если дошли до стены, то т.к. стен вдоль края всего три, то определить в какую из них уперлись не составляет сложности. как только определили положение робота, перемещение по любой траектории в любую точку задается линейным алгоритмом.
0
|
|
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|
| 22.12.2017, 09:52 [ТС] | |
|
Sindbad_M, а как робот определит положение? Можно (если впереди_стена и слева_стена), но тут есть ряд сложностей.. Он может оказаться в любом из углов, и это всё ломает.
Пока решил, что самое оптимальное решение - считерить с картой, упростив её максимально. [img]https://i.**********/l7br3aB.png[/img] Сделать так, чтобы не только в угол приехал, но именно на базу, использовав её как точку старта. Оттуда обход можно как по горизонтали, так и по вертикали пройти (в зависимости, как он будет повернут изначально).
0
|
|
|
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
|
||
| 22.12.2017, 10:18 | ||
|
Итак, робот находится в каком-то углу и известны два направления движения вдоль края. Робот двигается вдоль одного из краев. Возможны варианты: 1. дошли до следующего угла не встретив стены. Тогда продолжаем обходить доску вдоль следующего края 2. На первом шаге уперлись в стену, значит мы в ячейке К10 (координаты называю как в "Морском бое"), т.е. положение определено 3. На восьмом шаге уперлись в стену, значит мы в ячейке К8, т.е. положение определено 4. На третьем шаге уперлись в стену, конец доски справа, значит мы в ячейке Ж1, т.е. положение определено 5. На третьем шаге уперлись в стену, конец доски слева, значит мы в ячейке Г1, т.е. положение определено
0
|
||
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|
| 22.12.2017, 11:27 [ТС] | |
|
Sindbad_M, если брать пример, который я дал наверху, то он ведь может с любой стороны там оказаться. И линейным алгоритмом оттуда уже не поедешь, поскольку робот неверно сосчитает координаты.
В том примере вообще из-за препятствий, подобных углу, невозможно гарантированно попасть в угол.
0
|
|
|
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
|
|||
| 22.12.2017, 12:02 | |||
|
находясь в любом углу мы уже можем определить как хотим обходить поле - по часовой или против часовой стрелки, таким образом, возможные встречи с блоками сокращаются с четырех вариантов до двух.
Добавлено через 1 минуту Добавлено через 32 минуты
0
|
|||
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|||
| 22.12.2017, 15:26 [ТС] | |||
|
Кликните здесь для просмотра всего текста
ПроверитьРяд { yy = 0; пока ( впереди_свободно ) { вперед ( 1 ); yy = yy + 1; } ПроверитьКлетку; пока ( сзади_свободно ) { назад ( 1 ); yy = yy - 1; ПроверитьКлетку; } } /*---------------------*/ ПроверитьКлетку { если ( грядка ) посади; если ( база ) { x = xx; y = yy; } } //xx у них прирастает в самом теле программы, по условию (пока справа_свободно) <код> xx=x+1; Была идея хранить координаты в матрице, но среда не умеет в рамках процедур и функций передавать значения в массивах по адресу. В принципе, для очень легкого лабиринта я задачу уже решил. Но он у меня просто долбится в стенку, и возвращается. Если бы я расположил грядки за стенками, то я пока не придумал, как выкручиваться.
0
|
|||
|
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
|
|||
| 22.12.2017, 16:33 | |||
|
А ИИ все равно слишком трудоемок для курса "основы информатики". Алгоритм для заранее неизвестного лабиринта должен быть таким: 1. Обойти всю доску, сформировав в памяти карту лабиринта 2. Проанализировать карту, составив схему обхода для выполнения задания 3. Выполнить действия Пункты 1 и 2 каждый представляет собой хорошую олимпиадную задачу. Учтите, существуют лабиринты, для которых порядок высадки клумб важен, т.к. робот может сам себе заблокировать единственный выход. И все равно написать такой ИИ на практике не получится из-за ограничений языка и среды - отсутствуют динамические структуры данных, отсутствуют указатели, медленный интерпретатор не даст за разумное время реализовать перебор ходов.
0
|
|||
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|
| 22.12.2017, 16:38 [ТС] | |
|
0
|
|
|
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
|
||
| 22.12.2017, 16:46 | ||
|
В вашем случае стены образуют углы только между границей доски и стеной к ней примыкающей, т.е. углов внутри доски нет. Как только достигнем какого-нибудь угла, пара шагов в сторону и становится понятно, это угол границ доски или угол между границей и стеной. Как только определили что найденная стена это не стена а граница доски, можем двигаться либо оставляя её по правую руку (против часовой), либо по левую руку (по часовой стрелке).
0
|
||
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|
| 22.12.2017, 17:11 [ТС] | |
|
0
|
|
|
Айлурофил
|
||
| 22.12.2017, 21:10 | ||
|
Не по теме: Так, понятно, что тогда придётся перед ней признаться, что сам не может решить. А это обидно.
0
|
||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|
| 23.12.2017, 03:09 | |
|
Робот легко может посетить все доступные клетки и нарисовать карту.
0
|
|
|
0 / 0 / 0
Регистрация: 07.01.2011
Сообщений: 22
|
|||
| 23.12.2017, 18:44 [ТС] | |||
|
Не по теме:
Задача зачтена уже, в простом виде. Просто я не представляю до сих пор возможность сделать её с бонусными баллами - обходящую произвольный лабиринт.
0
|
|||
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
|
| 23.12.2017, 21:52 | |
|
0
|
|
|
Модератор
3134 / 2281 / 469
Регистрация: 26.03.2015
Сообщений: 8,877
|
||||||
| 27.12.2017, 14:53 | ||||||
Сообщение было отмечено eXpressionist как решение
Решение
Посмотрел я эту среду. Всё в ней можно написать, хотя и не совсем удобно.
Для примера я реализовал алгоритм нахождения кратчайшего пути А* с приоритетной очередью на основе бинарной пирамиды.
Несложно также написать функцию, которая будет будет составлять маршрут через все грядки на базу и проходить по этому пути, сажая клумбы (при последнем проходе через грядку).
0
|
||||||
| 27.12.2017, 14:53 | |
|
Помогаю со студенческими работами здесь
20
робот
Робот Робот
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|