পাইথন ২.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
, y ইন y
এবং আমাদের দিকনির্দেশের প্রথম অক্ষরটি এতে সঞ্চিত থাকে d
।
x=int(x)
y=int(y)
তারপরে আমরা কেবল কর্ডগুলি অন্তর্নির্মিত করি। (আমি হতবাক হয়ে গিয়েছিলাম যে আমি দুটি স্ট্রিংকে ints এ রূপান্তর করার আরও ভাল উপায়ের কথা ভাবতে পারিনি I আমি চেষ্টা করেছি 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 দিয়ে বৃদ্ধি পায় increases সুতরাং এই অভিধানটি 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]
সরাসরি তালিকায় রাখতে পারি। এটি যদি কাজ করে তবে আমার কাছে কয়েক দফা বাঁচাবেন, তবে আমি এই ব্যাখ্যাটি না করা পর্যন্ত এটি পরীক্ষা করার মতো মনে করি না, কারণ আপনারা সমস্ত কাজ করতে পারেন। (হ্যাঁ, এটি কাজ করেছে))
আমরা 'আরএল' স্ট্রিংয়ের ইনপুটটির বর্তমান অক্ষরটি সন্ধান করি। str.find
অক্ষরটি খুঁজে না পাওয়া গেলে -1 প্রদান করে, সুতরাং এটি একটি আর কে 0 তে 0, এল কে 1 এবং অন্য কিছুকে -1 এ রূপান্তর করে। অবশ্যই, আমাদের কেবলমাত্র অন্য ইনপুটটি এম হতে পারে তবে এটিকে সবকিছুর জন্য কার্যকর করার জন্য এটি কম অক্ষর।
আমরা তৈরি করা তালিকার জন্য সেই নম্বরটি সূচক হিসাবে ব্যবহার করি। পাইথনের তালিকার সূচকগুলি নেতিবাচক হলে শেষে শুরু হয়, সুতরাং আমরা ইনপুটটি आर হলে প্রথম উপাদানটি পাই, দ্বিতীয়টি এটি এল, এবং শেষটি যদি এটি এম এর জন্য হয় তবে সুবিধার জন্য, আমি ধরে নিতে চলেছি আমরা উত্তরের মুখোমুখি, তবে একই দিকটি অন্য দিকগুলির জন্য প্রযোজ্য।
আমরা যে সম্ভাব্য মান নিয়ে কাজ করছি তা হ'ল 'd+'
আর,'d-'
'y+'
এম এবং এম এর জন্য। তারপরে, আমরা '=1;d=d%4'
প্রতিটিটির শেষের সাথে সংযুক্ত করি । এর অর্থ আমাদের সম্ভাব্য মানগুলি ...
d+=1;d=d%4
d-=1;d=d%4
y+=1;d=d%4
এটি বৈধ অজগর কোড! এটি বৈধ অজগর কোড যা সেই সমস্ত ইনপুট চরিত্রের জন্য আমরা যা করতে চাই ঠিক তা করে! ( d=d%4
অংশটি কেবল আমাদের দিকনির্দেশকে বুদ্ধিমান রাখে Again আবারও, এটি প্রতিবার করার দরকার হয় না, তবে এটি কম অক্ষরগুলি থাকে))
আমাদের যা করতে হবে তা হ'ল প্রতিটি চরিত্রের জন্য আমরা যে কোডটি পেয়েছি তা কার্যকর করা, এটি মুদ্রণ করা (আমাদের দিকটি আবার স্ট্রিংয়ে রূপান্তর করা), এবং আমরা শেষ করেছি!