파이썬 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 바이트이며 전혀 풀리지 않았습니다). 예, 여전히 세미콜론이 있지만 실제로는 바이트를 절약합니다.
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(',')
여기서 우리는 각 쉼표에서 첫 번째 유아 줄을 나눕니다. x 좌표는에 x
, y에 y
, 그리고 방향의 첫 글자 가에 저장 됩니다 d
.
x=int(x)
y=int(y)
그런 다음 좌표를 int로 만듭니다. (두 문자열을 정수로 변환하는 더 좋은 방법을 생각할 수 없다는 것에 충격을 받았습니다. 시도 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이지만 모든 것을 위해 작동하게하는 문자는 적습니다.
우리는 그 번호를 우리가 만든 목록의 색인으로 사용합니다. 파이썬 목록 인덱스는 음수이면 끝에서 시작하므로 입력이 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
유효한 파이썬 코드입니다! 그것은 각각의 입력 문자에 대해 원하는 것을 정확하게 수행하는 유효한 파이썬 코드입니다! (이 d=d%4
부분은 방향을 제정신으로 유지합니다. 매번 할 필요는 없지만 문자는 적습니다.)
우리가해야 할 일은 각 문자에 대해 얻은 코드를 실행하고 인쇄하여 (방향을 문자열로 다시 변환) 완료된 것입니다!