3 added 27 characters in body
source | link

C 180164 186180 186

Edit Fixed input format and removed strchr
Edit Removed offset array, calc using bits

p,x,y,o[]={1,0,-1,0};mainy;main(){char c,d,l[100];scanf("%d,%d,%c%s",&x,&y,&d,l);for(d=d<83?d&1:d>>2&1|2;c=l[p++];d>>2&1|2;c=l[p++];d&=3)c-77?d=(d+c+1)&3d+=c+1:d&1?x+=d-2:(y+=o[d],x+=o[3y+=1-d]d);printf("%d %d %c",x,y,"NESW"[d]);}

Ungolfed

p, x, y, o[] = {1,0,-1,0};y;
main()
{
  char c, d, l[100];
  scanf("%d%d "%d,%d,%c%s",&x,&y,&d,l);
  for (d = d<'S'?d&1:d>>2&1|2; c = l[p++]; d &= 3)
    c-77 'M'
    ? d =+= (d+c+1)&3c+1
    : (y+=o[d],d x+=o[3& 1 ? x+=d-d]2 : (y+=1-d);
  printf("%d %d %c", x, y, "NESW"[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/

C 180 186

Edit Fixed input format and removed strchr

p,x,y,o[]={1,0,-1,0};main(){char c,d,l[100];scanf("%d,%d,%c%s",&x,&y,&d,l);for(d=d<83?d&1:d>>2&1|2;c=l[p++];)c-77?d=(d+c+1)&3:(y+=o[d],x+=o[3-d]);printf("%d %d %c",x,y,"NESW"[d]);}

Ungolfed

p, x, y, o[] = {1,0,-1,0};
main()
{
  char c, d, l[100];
  scanf("%d%d %c%s",&x,&y,&d,l);
  for (d = d<'S'?d&1:d>>2&1|2; c = l[p++];)
    c-77 
    ? d = (d+c+1)&3
    : (y+=o[d], x+=o[3-d]);
  printf("%d %d %c", x, y, "NESW"[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/

C 164 180 186

Edit Fixed input format and removed strchr
Edit Removed offset array, calc using bits

p,x,y;main(){char c,d,l[100];scanf("%d,%d,%c%s",&x,&y,&d,l);for(d=d<83?d&1:d>>2&1|2;c=l[p++];d&=3)c-77?d+=c+1:d&1?x+=d-2:(y+=1-d);printf("%d %d %c",x,y,"NESW"[d]);}

Ungolfed

p, x, y;
main()
{
  char c, d, l[100];
  scanf("%d,%d,%c%s",&x,&y,&d,l);
  for (d = d<'S'?d&1:d>>2&1|2; c = l[p++]; d &= 3)
    c-'M'
    ? d += c+1
    : d & 1 ? x+=d-2 : (y+=1-d);
  printf("%d %d %c", x, y, "NESW"[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/
2 deleted 48 characters in body
source | link

C 186180 186

Edit Fixed input format and removed strchr

p,x,y,o[]={1,0,-1,0};main(){char*D="NESW",char c,d,l[100];scanf("%d%d "%d,%d,%c%s",&x,&y,&d,l);for(d=(char*)strchr(D,d)-D;c=l[p++];d=d<83?d&1:d>>2&1|2;c=l[p++];)c-77?d=(d+c+1)&3:(y+=o[d],x+=o[3-d]);printf("%d %d %c",x,y,D[d]"NESW"[d]);}

Ungolfed

p, x, y, o[] = {1,0,-1,0};
main()
{
  char *D = "NESW", c, d, l[100];
  scanf("%d%d %c%s",&x,&y,&d,l);
  for (d = (char*)strchr(D,d) - D;d<'S'?d&1:d>>2&1|2; c = l[p++];)
    c-77 
    ? d = (d+c+1)&3
    : (y+=o[d], x+=o[3-d]);
  printf("%d %d %c", x, y, D[d]"NESW"[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/

NB Probably using non-standard features of GCC, the cast of strchr to (char*) is not needed

C 186

p,x,y,o[]={1,0,-1,0};main(){char*D="NESW",c,d,l[100];scanf("%d%d %c%s",&x,&y,&d,l);for(d=(char*)strchr(D,d)-D;c=l[p++];)c-77?d=(d+c+1)&3:(y+=o[d],x+=o[3-d]);printf("%d %d %c",x,y,D[d]);}

Ungolfed

p, x, y, o[] = {1,0,-1,0};
main()
{
  char *D = "NESW", c, d, l[100];
  scanf("%d%d %c%s",&x,&y,&d,l);
  for (d = (char*)strchr(D,d) - D; c = l[p++];)
    c-77 
    ? d = (d+c+1)&3
    : (y+=o[d], x+=o[3-d]);
  printf("%d %d %c", x, y, D[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/

NB Probably using non-standard features of GCC, the cast of strchr to (char*) is not needed

C 180 186

Edit Fixed input format and removed strchr

p,x,y,o[]={1,0,-1,0};main(){char c,d,l[100];scanf("%d,%d,%c%s",&x,&y,&d,l);for(d=d<83?d&1:d>>2&1|2;c=l[p++];)c-77?d=(d+c+1)&3:(y+=o[d],x+=o[3-d]);printf("%d %d %c",x,y,"NESW"[d]);}

Ungolfed

p, x, y, o[] = {1,0,-1,0};
main()
{
  char c, d, l[100];
  scanf("%d%d %c%s",&x,&y,&d,l);
  for (d = d<'S'?d&1:d>>2&1|2; c = l[p++];)
    c-77 
    ? d = (d+c+1)&3
    : (y+=o[d], x+=o[3-d]);
  printf("%d %d %c", x, y, "NESW"[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/
1
source | link

C 186

p,x,y,o[]={1,0,-1,0};main(){char*D="NESW",c,d,l[100];scanf("%d%d %c%s",&x,&y,&d,l);for(d=(char*)strchr(D,d)-D;c=l[p++];)c-77?d=(d+c+1)&3:(y+=o[d],x+=o[3-d]);printf("%d %d %c",x,y,D[d]);}

Ungolfed

p, x, y, o[] = {1,0,-1,0};
main()
{
  char *D = "NESW", c, d, l[100];
  scanf("%d%d %c%s",&x,&y,&d,l);
  for (d = (char*)strchr(D,d) - D; c = l[p++];)
    c-77 
    ? d = (d+c+1)&3
    : (y+=o[d], x+=o[3-d]);
  printf("%d %d %c", x, y, D[d]);
} 
/*
M 77
R 82 0101 0010 R&3+1==3
L 76 0100 1100 L&3+1==1 
*/

NB Probably using non-standard features of GCC, the cast of strchr to (char*) is not needed