IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Удав, Задача на координаты и направление
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 11
Пол: Мужской
Реальное имя: Kost

Репутация: -  0  +


Помогите решить вот эту несложную задачу. Преподаватель говорит, что решать её нужно как то через матрицы.

Удав расположен в виде нескольких линий, из которых каждая следущая перпендикулярна предыдущей. Направление каждой линии и её протяженность задаются буквами "L" , "R" и числом.

Например 25L15R5 ("25" - длина линии = 25, "L" - поворачивает на 90 градусов влево, "15" - длина линии = 15 , "R" - поворачивает на 90 градусов вправо , "5" - длина линии = 5).

Определить, пересечет ли он себя.

Сообщение отредактировано: 1qsd -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


По ходу дела, посмотрев на все сложности, возникшие в геометрическом методе (надеюсь, они все все же преодолены smile.gif), я решил написать программку по методу "матрицы".
Получилось действительно намного проще, на ее написание ушло замееееетно меньше времени. Я использую симметричный байтовый массив, который, если удовлетворять ограничениям ТР, не должен превышать 64К. Это значит, если округлить, что поле выходит примерно от -100 до 100 по каждой координате.. Разумеется, ситуация намного улучшится в FPC (например на 1 ГБ памяти можно сделать поле от -15000 до +15000), но все равно вряд ли кто станет спорить, что геометрическое решение лучше в смысле эффективности (хотя, при большом количестве поворотов и небольшом диаметре они все же могут конкурировать).. Правда, остается еще вариант со сжатием матрицы на лету - но это уже извращение.. smile.gif

Хотя, разве не извращение уже и то, что я потратил несколько часов на эту задачу? smile.gif
Надеюсь, не совсем зря..
{Search for Boa crossings, matrix method}
{by Lapp}

const
m=100; n=100;

var
Z:array[-m..m,-n..n]of byte;
x,y,dx,dy,e,l,b:integer;
s:string;
c:char;
f:file of char;

begin
dx:=1; dy:=0;
x:=0; y:=0;
FillChar(Z,SizeOf(Z),0);
Z[0,0]:=1;
Assign(f,'boa.dat');
Reset(f);
while not EoF(f) do begin
Read(f,c);
c:=UpCase©;
if c in['0'..'9'] then s:=s+c;
if (c in['L','R'])or EoF(f) then begin
Val(s,l,e);
while l>0 do begin
Inc(x,dx);
Inc(y,dy);
if Z[x,y]=1 then begin
WriteLn('Crossing at ',x,',',y);
Halt
end
else Z[x,y]:=1;
Dec(l)
end;
s:='';
case c of
'L':begin b:=dx; dx:=-dy; dy:=b end;
'R':begin b:=dx; dx:=dy; dy:=-b end;
end
end
end;
WriteLn('No crossings')
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Теперь я думаю, как говорится, тема раскрыта smile.gif Я б вчера ответил и поговорил на эту тему, но, блин, пошел ребенка укладывать и сам заснул lol.gif Но все же для меня вопрос остался открыт: как правильно представить удава - в векторном виде (тогда имеются общие точки в углах и начало в точке 0х0) или кубиками (тогда по идее 0х0 не занята (хотя в последнем примере ты ее занял, что не дало пройти тест by Michael_Rybak 10L10L10L20) и отрезки друг к другу прикасаются, но общих точек не имеют.. Наверно правилен матричный способ (я сначала тоже векторным начал (к рекурсии свалился smile.gif ) и на нем остановиться, жаль только с размерностью неуниверсально получается sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
1qsd   Удав   26.03.2007 18:59
мисс_граффити   С матрицами... Единственная идея: берем матрицу из…   26.03.2007 21:04
1qsd   1) можно и не через матрицы 2) можно пользоваться …   26.03.2007 22:03
мисс_граффити   Идея такая: разбиваем удавчика на отрезки, которые…   26.03.2007 23:15
1qsd   давайте по порядку 1) как записывать в массив: сам…   26.03.2007 23:51
мисс_граффити   1) мне кажется, тут подойдет запись с тремя полями…   27.03.2007 0:09
1qsd   А вы можете код с клеточками (во втором сообщении …   27.03.2007 0:37
мисс_граффити   а сам не хочешь попробовать хотя бы?   27.03.2007 1:24
Michael_Rybak   И уточни еще, что если он не пересекает себя, но к…   27.03.2007 2:15
Lapp   Я тоже не придумал, как тут использовать матрицы, …   27.03.2007 11:43
Lapp   Идея такая: разбиваем удавчика на отрезки, которы…   27.03.2007 15:52
Michael_Rybak   В таком случае горизонтальные нельзя проверять т…   27.03.2007 17:43
Malice   В таком случае горизонтальные нельзя проверять то…   27.03.2007 18:54
Michael_Rybak   10L10L10R10R10R30   27.03.2007 21:02
Гость   О чем я и говорил. Пересекает еще и смежные отрезк…   27.03.2007 22:23
Malice   Эт я был.. Я же имел ввиду случай типа:   27.03.2007 22:29
Michael_Rybak   Он не пересекает смежные отрезки. Я ведь специальн…   28.03.2007 1:06
Malice   Гы :) В таком случает надо определьтся - включает …   28.03.2007 1:35
Michael_Rybak   У меня не получался нигде квадрат 11х11. Получало…   28.03.2007 2:53
Lapp   Критику принял. Думаю..   28.03.2007 4:06
Lapp   Коллеги, я не вполне все же вас понял.. Michael_Ry…   28.03.2007 5:30
Lapp   2 Malice: Случай с подходом к хвосту сзади лечится…   28.03.2007 6:23
Lapp   Неужели Michael_Rybak все же прав (сам того не зн…   28.03.2007 9:27
Lapp   2 Lapp: (а с кем еще и поговорить-то ночью.. :)) В…   28.03.2007 10:26
1qsd   Если удав выглядит как спираль, например так 1R2R3…   28.03.2007 12:33
Lapp   например так 1R2R3R4R5R6 ... программма не работа…   28.03.2007 14:19
Lapp   По ходу дела, посмотрев на все сложности, возникши…   28.03.2007 16:29
Malice   Теперь я думаю, как говорится, тема раскрыта :) Я …   28.03.2007 22:18
Michael_Rybak   Я считаю, что нужно строго определить самопересече…   28.03.2007 22:23
Lapp   Мужики, не драматизируйте ситуацию. Не забывайте …   29.03.2007 5:02


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 8:16
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name