पायथन 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(',')
यहाँ हम प्रत्येक अल्पविराम पर inpupt की पहली पंक्ति को विभाजित करते हैं। हमारे x निर्देशांक को x
y y
, और हमारी दिशा के पहले अक्षर में संग्रहीत किया जाता है d
।
x=int(x)
y=int(y)
फिर हम बस कोर्ड्स बनाते हैं। (मैं हैरान था कि मैं दो तारों को चींटियों में बदलने के लिए बेहतर तरीके के बारे में नहीं सोच सकता था। मैंने कोशिश की 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'
मैं इस एक छोटे से ungolfing की स्वतंत्रता के लिए गया हूँ।
इनपुट की दूसरी पंक्ति में प्रत्येक वर्ण के लिए, हम दो काम करते हैं। सबसे पहले, हम m
अपने वर्तमान दिशा के लिए हमें जो भी शब्दकोश देते हैं उससे पहले हम चर को सेट करते हैं । ऐसा कोई कारण नहीं है कि हमें हर बार ऐसा करने की आवश्यकता है, लेकिन जब हम इसकी आवश्यकता होती है, तो इसे बनाने की तुलना में यह आसान होता है।
इसके बाद, हम तीन तत्वों के साथ एक सूची बना सकते: 'd+'
, 'd-'
, और m
। संपादकीय नोट: मुझे लगता है कि मैं चर का उपयोग न करने के साथ दूर हो सकता हूं m
। मुझे लगता है कि मैं v[d]
सीधे सूची में डाल सकता हूं । अगर यह काम करता है तो मुझे एक दो बाइट्स बचा सकता है, लेकिन जब तक मैं इस स्पष्टीकरण को पूरा नहीं कर लेता, तब तक मुझे ऐसा महसूस नहीं होता है कि आप इससे निपट सकते हैं। (हाँ, यह काम किया।)
हम स्ट्रिंग 'RL' में इनपुट के वर्तमान वर्ण की तलाश करते हैं। str.find
रिटर्न -1 अगर यह कैरेक्टर नहीं मिलता है, तो यह एक आर को 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
भाग सिर्फ हमारी दिशाओं को समझदार रखता है। फिर से, इसे हर बार करने की आवश्यकता नहीं है, लेकिन यह कम अक्षर है।)
हमें बस इतना करना है कि हम प्रत्येक वर्ण के लिए प्राप्त कोड को निष्पादित करें, इसे प्रिंट करें (हमारी दिशा एक स्ट्रिंग में परिवर्तित करें), और हम कर चुके हैं!