Python 2.7 - 197 192 byte
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]
Sono davvero super orgoglioso di questo.
Spiegazione
Per prima cosa, puliamo questo casino. Ho usato i punti e virgola anziché le interruzioni di riga in molti punti perché penso che mi renda cool. Qui è normalmente (questo è ancora 197 byte, non è stato affatto non salvato). Sì, c'è ancora un punto e virgola, ma quello effettivamente salva un byte.
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]
Cominciamo!
q='NESW'
Per prima cosa definiamo qla stringa 'NESW'. Lo usiamo due volte dopo, e len("q='NESW';qq") < len("'NESW''NESW'").
x,y,d=raw_input().split(',')
Qui dividiamo la prima riga di input in ogni virgola. Il nostro x coord è memorizzato in x, y in ye la prima lettera della nostra direzione in d.
x=int(x)
y=int(y)
Quindi facciamo solo le coordinate. (Sono rimasto scioccato dal fatto che non riuscivo a pensare a un modo migliore per convertire due stringhe in ints. Ci ho provato x,y=map(int,(x,y))ma questo risulta essere più lungo.)
d=q.find(d)
Questo converte la nostra direzione in un numero intero. 0 è nord, 1 è est, 2 è sud e 3 è ovest.
v={0:'y+',1:'x+',2:'y-',3:'x-'}
È qui che inizia il divertimento.
Quando andiamo a nord, Y aumenta di 1. Quindi questo dizionario prende 0 e fornisce la stringa 'y+', per "aumentare y". Fornisce risultati simili per altre direzioni: y o x seguito da + o -.
Torneremo su questo.
for c in raw_input():
m=v[d]
exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
Sono andato alla libertà di liberare leggermente questo.
Per ogni personaggio nella seconda riga di input, facciamo due cose. Innanzitutto, impostiamo la variabile msu qualunque cosa il nostro dizionario di prima ci dia per la nostra direzione attuale. Non c'è motivo per cui abbiamo bisogno che ciò accada ogni volta, ma è più semplice che farlo accadere quando ne abbiamo bisogno.
Successivamente, creiamo una lista con tre elementi: 'd+', 'd-', e m. NOTA DELL'EDITOR: Penso di poter fare a meno di non usare affatto la variabile m. Penso di poter semplicemente inserire v[d]la lista direttamente. Questo mi farà risparmiare un paio di byte se funziona, ma non ho voglia di provarlo fino a quando non avrò fatto questa spiegazione in modo che tutti voi possiate occuparvi. (Sì, ha funzionato.)
Cerchiamo il carattere corrente dell'input nella stringa 'RL'. str.findrestituisce -1 se non trova il carattere, quindi converte una R in 0, una L in 1 e qualsiasi altra cosa in -1. Ovviamente, l'unico altro input che possiamo avere è M, ma sono meno i caratteri a farlo funzionare per tutto.
Usiamo quel numero come indice per l'elenco che abbiamo creato. Gli indici dell'elenco Python iniziano alla fine se sono negativi, quindi otteniamo il primo elemento se l'input è R, il secondo se è L e l'ultimo se è M. Per comodità, sto per supporre che siamo rivolti a nord, ma un principio simile si applica per altre direzioni.
I possibili valori con cui stiamo lavorando sono 'd+'per R, 'd-'per L e 'y+'per M. Quindi, assegniamo '=1;d=d%4'alla fine di ognuno. Ciò significa che i nostri possibili valori sono ...
d+=1;d=d%4
d-=1;d=d%4
y+=1;d=d%4
Questo è un codice Python valido! Questo è un codice Python valido che fa esattamente quello che vogliamo fare per ciascuno di quei caratteri di input! (La d=d%4parte mantiene sane le nostre indicazioni. Ancora una volta, non è necessario farlo ogni volta, ma sono meno personaggi.)
Tutto quello che dobbiamo fare è eseguire il codice che otteniamo per ogni personaggio, stamparlo (riconvertendo la nostra direzione in una stringa) e il gioco è fatto!