Форум сайта python.su
Помогите пожалуйста написать код к задаче. В прикрепленном файле изображено два пути по которым двигаются стрелочки.Они состоят из прямых ( | ) и (-), кривых ( /и \) и пересечений ( +). Пересечения происходят, когда пересекаются два перпендикулярных пути. На перекрестке стрелочка может поворачивать налево, поворачивать направо или продолжать движение прямо.Каждый раз, когда у стрелочки есть возможность повернуть (достигнув любого перекрестка), она поворачивает влево в первый раз, идет прямо во второй раз, поворачивает направо в третий раз, а затем повторяет эти указания, начиная снова с левого четвертого раза, прямо в пятый раз и тд. Этот процесс не зависит от конкретного пересечения, к которому прибыла стрелочка, то есть стрелочка не имеет памяти для каждого пересечения.Стрелочки движутся с одинаковой скоростью. они по очереди двигаются по одному шагу за раз. Они делают это в зависимости от своего текущего местоположения : сначала перемещаются стрелочки в верхнем ряду (действуя слева направо), затем перемещаются стрелочки во втором ряду (снова слева направо), затем стрелочки в третьем ряду и так далее.
Если стрелочки сталкиваются, то ничего не происходит и они дальше продолжают движение.Учитель сказал что мы должны будем писать в коде количество шагов и этот код должен показывать на каких местах расположены стрелочки.
Отредактировано Axwts (Янв. 17, 2019 14:11:13)
Прикреплённый файлы:
ZpoHOoKZGdQ.jpg (6,4 KБ)
Офлайн
Нужно сделать двумерный массив символов, в котором есть все занятые клетки и все пустоты. Для каждой стрелочки надо сделать память последнего прохода через перекрёсток в виде числа. Также надо сделать память для символа под каждой стрелкой, чтобы при перемещении стрелки этот символ вставлялся в освободившееся место.
И дальше на каждом шаге ты проверяешь положение стрелки и что у неё впереди. Она может поворачиваться, доходя до края, она может видеть перекрёсток и требовать переключения числа прохода перекрёстка.
Отредактировано py.user.next (Янв. 17, 2019 14:07:03)
Офлайн
Axwts
В прикрепленном файле изображено два пути по которым двигаются стрелочки.Они состоят из прямых ( | ) и (-), кривых ( /и \)
. | --/-- |
AxwtsА какая разница, в каком порядке они ходят, если результат вы видите уже после того, как передвинуты все стрелки? Надо будет держать информацию о стрелках не в виде “'>' в строке, описывающей трассу”, хотя бы для поворотов в нужную сторону. Т.е. это требование выглядит странно.
Стрелочки движутся с одинаковой скоростью. они по очереди двигаются по одному шагу за раз. Они делают это в зависимости от своего текущего местоположения : сначала перемещаются стрелочки в верхнем ряду …
AxwtsА если две стрелки пойдут по одному пути? Встретятся на пересечении и обе повернут на одну ветку. Скорее всего тоже “ничего не происходит”, но мало ли.
Если стрелочки сталкиваются, то ничего не происходит и они дальше продолжают движение.
# map = ''' /---⌝ | | /----⌝''' map = map.replace('⌝', '\\').split('\n')[1:]
cell = map[y][x]
rule['/']['N'] = 'E'.
rule['-'] = {'N':False, 'S':False, 'E': True, 'W': True}
# cell = map[arrow.y][arrow.x] if cell == '+'
rule[cell][arrow.direction] == True
rule[cell][arrow.direction]
Офлайн
О! Вместо NSEW лучше использовать ∧∨<>.
Офлайн
uf4JaiD5, запутанный код получается.
Выполни в интерпретаторе
import this
Отредактировано py.user.next (Янв. 18, 2019 05:33:50)
Офлайн
py.user.nextНе вижу никакой запутанности. Можно дописать до конца и сравнить.
запутанный код получается.
py.user.nextУ моего алгоритма это не вызовет никаких затруднений.
Мы можем предположить, что вся карта забита одними стрелочками, и их нужно все продвинуть на три шага. Представил? И карта на 1000 строк и столбцов.
py.user.nextВ первом же абзаце писал об этом.
Плюс карта может быть произвольной - не такой, а другой.
Офлайн
uf4JaiD5Ну вот смотри, ты использовал map, а тебе не интересно, почему она зелёненьким цветом раскрасилась?
Можно дописать до конца и сравнить.
uf4JaiD5map = map.replace('⌝', '\\').split('\n')[1:]
Офлайн
py.user.nextПлохо, конечно, но это ж “схема”, “описание алгоритма” а не готовый код.
Ну вот смотри, ты использовал map
py.user.nextУ меня всё работает. Сделай свой, “незапутанный”, вариант.
Ну и столкновение стрелок у тебя где?
Офлайн
uf4JaiD5Не, я имею в виду ещё более новичковый уровень - ты не знаешь про встроенную функцию map().
Плохо, конечно, но это ж “схема”, “описание алгоритма” а не готовый код.
uf4JaiD5Так у тебя кода даже нет, как ты его проверишь, работает ли он на практике? В теории-то много чего может быть.
У меня всё работает.
Офлайн
py.user.nextПоэтому я и пишу “плохо, что я обозвал эту переменную map, но пока это схема, а не готовый исходник – не смертельно”.
встроенную функцию map()
py.user.nextВо-первых, даже по выложенным здесь наброскам видно, что всё будет работать.
Так у тебя кода даже нет, как ты его проверишь, работает ли он на практике?
Офлайн