Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

СРОЧНО ПАЙТОН D. Игра-платформер

Владимир Мещеряков Ученик (78), на голосовании 2 дня назад
Вы разрабатываете игру-платформер. Игровое поле может быть представлено как бесконечная клетчатая полоска,
каждая клетка которой занумерована целым числом как на картинке ниже. Изначально игрок находится в позиции 0 и смотрит вправо.
На вход вашей программе подается последовательность команд — движения игрока. Они могут быть трех типов:
F - Forward - Движение вперед в текущем направлении
R - Right - Поворот направо
L - Left - Поворот налево
При этом разрешается несколько раз выполнять один и тот же поворот,
например, «LL». После такой последовательности команд игрок будет смотреть влево.
Вы нашли уязвимость в игре и получили последовательность действий вашего друга.
Вам известно, что перехваченная вами последовательность отличается от настоящей ровно в одном символе.
Найдите все позиции,
в которых мог на самом деле оказаться ваш друг после выполнения всех действий.
Формат ввода
В первой строке ввода находится единственное целое число N количество команд.
Во второй строке находятся N символов — сами команды.
Гарантируется, что все символы принадлежат множеству {«F»,«R»,«L»}.
Формат вывода
Выведите единственное число — количество различных позиций, на которых мог оказаться игрок после выполнения всех действий.
Голосование за лучший ответ
Татьяна Просветленный (32773) 1 месяц назад
 def final_positions_count(N, commands): 
def move(commands):
x = 0
direction = 0 # 0 - right, 1 - down, 2 - left, 3 - up
for command in commands:
if command == 'F':
if direction == 0:
x += 1
elif direction == 2:
x -= 1
elif command == 'R':
direction = (direction + 1) % 4
elif command == 'L':
direction = (direction - 1) % 4
return x

unique_positions = set()
for i in range(N):
for replacement in 'FRL':
if commands[i] != replacement:
new_commands = commands[:i] + replacement + commands[i+1:]
position = move(new_commands)
unique_positions.add(position)

return len(unique_positions)

# Чтение входных данных
N = int(input())
commands = input().strip()

# Вычисление и вывод результата
print(final_positions_count(N, commands))
Владимир МещеряковУченик (78) 1 месяц назад
Ввод Вывод
3
RLF 4

Пример 2
Ввод Вывод
6
LRFFLR 6

Пример 3
Ввод Вывод
3
FFF 3
Владимир МещеряковУченик (78) 1 месяц назад
должно быть так
а выводит на еденицу меньше
Катя Пасюкова Знаток (380) 2 дня назад
Меня тоже интересует решение этой задачи, особенно беспокоит вопрос, возможно ли её решить быстрее чем за O(n^2) ?
Похожие вопросы