Python 2.7 - 197 192 bajty
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]
Jestem z tego bardzo dumny.
Wyjaśnienie
Najpierw posprzątajmy ten bałagan. W wielu miejscach używałem średników zamiast łamania linii, ponieważ myślę, że to sprawia, że jestem fajny. Tutaj jest normalnie (wciąż jest to 197 bajtów, wcale nie zostało odkryte). Tak, nadal jest średnik, ale ten faktycznie oszczędza bajt.
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]
Zaczynajmy!
q='NESW'
Najpierw definiujemy qjako ciąg 'NESW'. Używamy go dwa razy później i len("q='NESW';qq") < len("'NESW''NESW'").
x,y,d=raw_input().split(',')
Tutaj dzielimy pierwszą linię inpupt na każdym przecinku. Nasza współrzędna x jest przechowywana w x, y yi pierwsza litera naszego kierunku w d.
x=int(x)
y=int(y)
Następnie wykonujemy tylko integry. (Byłem zszokowany, że nie mogłem wymyślić lepszego sposobu na konwersję dwóch ciągów znaków na int. Próbowałem, x,y=map(int,(x,y))ale okazało się, że jest dłuższy).
d=q.find(d)
Konwertuje to nasz kierunek na liczbę całkowitą. 0 to północ, 1 to wschód, 2 to południe, a 3 to zachód.
v={0:'y+',1:'x+',2:'y-',3:'x-'}
Tu zaczyna się zabawa.
Kiedy jedziemy na północ, Y wzrasta o 1. Tak więc słownik przyjmuje 0 i podaje ciąg znaków 'y+' , dla „wzrost y”. Daje podobne wyniki dla innych kierunków: y lub x, po których następuje + lub -.
Wrócimy do tego.
for c in raw_input():
m=v[d]
exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
Pozwoliłem sobie nieco na odhaczanie tego.
Dla każdego znaku w drugim wierszu wprowadzania robimy dwie rzeczy. Najpierw ustawiamy zmiennąm na cokolwiek, co nasz słownik dawał nam dla naszego obecnego kierunku. Nie ma żadnego powodu, dla którego powinniśmy to robić za każdym razem, ale jest to łatwiejsze niż sprawienie, aby stało się to, kiedy jest to potrzebne.
Następnie tworzymy listę z trzech elementów: 'd+', 'd-', i m. UWAGA REDAKTORA: Myślę, że mogę w ogóle uniknąć używania zmiennej m. Myślę, że mogę po prostu bezpośrednio umieścić v[d]na liście. Pozwoli mi to zaoszczędzić kilka bajtów, jeśli zadziała, ale nie mam ochoty go testować, dopóki nie skończę tego wyjaśnienia, abyście mogli sobie poradzić.(Tak, zadziałało.)
Szukamy bieżącego znaku wejścia w ciągu „RL”. str.findzwraca -1, jeśli nie znajdzie znaku, więc konwertuje R na 0, L na 1 i cokolwiek innego na -1. Oczywiście, jedyne inne dane wejściowe, jakie możemy mieć, to M, ale jest mniej znaków, aby działał na wszystko.
Używamy tego numeru jako indeksu dla utworzonej przez nas listy. Wskaźniki listy w języku Python zaczynają się na końcu, jeśli są ujemne, więc otrzymujemy pierwszy element, jeśli dane wejściowe to R, drugi jeśli to L, a ostatni jeśli to M. Dla wygody, zamierzam założyć, że zwrócimy się na północ, ale podobna zasada obowiązuje w innych kierunkach.
Możliwe wartości, z którymi pracujemy, to 'd+'R, 'd-'L i 'y+'M. Następnie dołączamy '=1;d=d%4'na końcu każdego z nich. Oznacza to, że naszymi możliwymi wartościami są ...
d+=1;d=d%4
d-=1;d=d%4
y+=1;d=d%4
To jest poprawny kod Pythona! To prawidłowy kod python, który robi dokładnie to, co chcemy zrobić dla każdego z tych znaków wejściowych! (Ta d=d%4część po prostu podtrzymuje nasze wskazówki. Ponownie, nie musisz tego robić za każdym razem, ale jest mniej postaci.)
Wszystko, co musimy zrobić, to wykonać kod, który otrzymujemy dla każdego znaku, wydrukować go (konwertując nasz kierunek z powrotem na ciąg znaków) i gotowe!