Python 2.7 - 197 192 байта
q='NESW';x,y,d=raw_input().split(',');x=int(x);y=int(y);d=q.find(d);v={0:'y+',1:'x+',2:'y-',3:'x-'}
for c in raw_input():exec['d+','d-',v[d]]['RL'.find(c)]+'=1;d=d%4'
print`x`+','+`y`+','+q[d]
Я на самом деле очень горжусь этим.
объяснение
Во-первых, давайте исправим этот беспорядок. Я использовал точки с запятой вместо разрывов строк во многих местах, потому что я думаю, что это делает меня крутым. Здесь это обычно (это - все еще 197 байтов, это не было ungolfed вообще). Да, еще есть точка с запятой, но она на самом деле сохраняет байт.
q='NESW'
x,y,d=raw_input().split(',')
x=int(x)
y=int(y)
d=q.find(d)
v={0:'y+',1:'x+',2:'y-',3:'x-'}
for c in raw_input():m=v[d];exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
print`x`+','+`y`+','+q[d]
Давайте начнем!
q='NESW'
Сначала мы определяем qкак строку 'NESW'. Мы используем это дважды позже, и len("q='NESW';qq") < len("'NESW''NESW'").
x,y,d=raw_input().split(',')
Здесь мы разделяем первую строку inpupt на каждую запятую. Наша координата x хранится в x, y в y, и первая буква нашего направления в d.
x=int(x)
y=int(y)
Тогда мы просто делаем координаты. (Я был шокирован, что не мог придумать лучшего способа преобразования двух строк в целые. Я пытался, x,y=map(int,(x,y))но это оказалось дольше.)
d=q.find(d)
Это преобразует наше направление в целое число. 0 север, 1 восток, 2 юг и 3 запад.
v={0:'y+',1:'x+',2:'y-',3:'x-'}
Здесь начинается самое интересное.
Когда мы идем на север, Y увеличивается на 1. Таким образом, этот словарь берет 0 и дает строку 'y+'для «увеличения y». Он дает аналогичные результаты для других направлений: y или x, за которыми следует + или -.
Мы вернемся к этому.
for c in raw_input():
m=v[d]
exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
Я позволил себе немного развеять это.
Для каждого символа во второй строке ввода мы делаем две вещи. Во-первых, мы устанавливаем переменную равной mтому, что наш словарь дает нам для нашего текущего направления. Нет причин, по которым нам нужно, чтобы это происходило каждый раз, но это проще, чем просто делать это, когда нам это нужно.
Далее мы создаем список из трех элементов: 'd+', 'd-', и m. ПРИМЕЧАНИЕ РЕДАКТОРА: Я думаю, что могу обойтись без использования переменной mвообще. Я думаю, что я могу просто внести v[d]в список напрямую. Это сэкономит мне пару байтов, если это сработает, но я не испытываю желание испытать это, пока я не закончу это объяснение, чтобы вы могли справиться. (Да, это сработало.)
Мы ищем текущий символ ввода в строке 'RL'. str.findвозвращает -1, если не находит символ, поэтому он преобразует R в 0, L в 1 и все остальное в -1. Конечно, единственный другой вход, который мы можем иметь, это M, но меньше символов, чтобы он работал для всего.
Мы используем это число в качестве индекса для списка, который мы создали. Индексы списка Python начинаются в конце, если они отрицательные, поэтому мы получаем первый элемент, если входное значение R, второй, если это L, и последний, если это M. Для удобства, я собираюсь предположить, что мы стоим на севере, но аналогичный принцип применим и для других направлений.
Возможные значения, с которыми мы работаем, 'd+'для R, 'd-'для L и 'y+'для M. Затем мы присоединяем '=1;d=d%4'к концу каждого из них. Это означает, что наши возможные ценности ...
d+=1;d=d%4
d-=1;d=d%4
y+=1;d=d%4
Это действительный код Python! Это правильный код Python, который делает именно то, что мы хотим сделать для каждого из этих входных символов! (Эта d=d%4часть просто держит наши указания в здравом уме. Опять же, не нужно делать это каждый раз, но это меньше символов.)
Все, что нам нужно сделать, это выполнить код, который мы получаем для каждого символа, распечатать его (преобразовав наше направление обратно в строку), и все готово!