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バイトですが、まったく変更されていません)。はい、まだセミコロンがありますが、実際にはそのバイトが保存されます。
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'
。後で2回使用し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)
次に、coords intを作成します。(2つの文字列を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+'
、「increase y」を表す。他の方向についても同様の結果が得られます:yまたはxの後に+または-が続きます。
これに戻ります。
for c in raw_input():
m=v[d]
exec['d+','d-',m]['RL'.find(c)]+'=1;d=d%4'
私はこれを少しだけ自由にした。
入力の2行目の各文字について、2つのことを行います。まず、変数を設定しますm
を、以前の辞書から現在の方向。毎回これを実行する必要がある理由はありませんが、必要なときに実行するよりも簡単です。
:次に、我々は、3つの要素を持つリストを作成し'd+'
、'd-'
、とm
。編集者注:変数m
をまったく使用しなくても大丈夫だと思います。v[d]
リストに直接入れることができると思います。うまくいけば数バイト節約できますが、この説明を終えるまでテストする気はありません。(ええ、うまくいきました。)
文字列「RL」で入力の現在の文字を探します。str.find
文字が見つからない場合は-1を返すため、Rを0に、Lを1に、その他を-1に変換します。もちろん、他に入力できるのはMだけですが、すべての場合に使用できる文字は少なくなります。
その番号を、作成したリストのインデックスとして使用します。Pythonリストのインデックスは、負の場合は最後から始まるので、入力がRの場合は最初の要素、Lの場合は2番目、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
部分は、私たちの方向を正気に保つだけです。繰り返しますが、毎回行う必要はありませんが、文字数は少なくなります。)
必要なのは、各文字に対して取得したコードを実行し、それを印刷(方向を文字列に戻す)することだけです。