कोड गोल्फ: अंतरिक्ष यान का भाग्य क्या है? [अस्थायी बिंदु संस्करण]


12

यह प्रश्न ASCII कला संस्करण की तुलना में थोड़ा कठिन है। कोई कला नहीं है, और अब आपको कुछ अस्थायी बिंदु अंकगणित करने के लिए मिलता है!

चुनौती

USS StackExchange ग्रह cg-00DLEF के गुरुत्व क्षेत्र से होकर गुजर रहा था जब एक खगोलीय विस्फोट हुआ। जहाज के मुख्य प्रोग्रामिंग अधिकारी के रूप में, यह भविष्यवाणी करने के लिए कि क्या आपको cg-00DELF के सौर मंडल में भूमि को क्रैश करने के लिए मजबूर किया जाएगा, आपके जहाज के प्रक्षेपवक्र को अनुकरण करना आपका काम है। विस्फोट के दौरान, आपका जहाज बहुत क्षतिग्रस्त हो गया था। रिक्त स्थान के सीमित मुक्त DEEEPRAROM * के कारण, आपको अपना कार्यक्रम यथासंभव कुछ वर्णों में लिखना होगा।

* डायनामिकली एक्सेसेबल इलेक्ट्रॉनिकली इरेसेबल प्रोग्रामेबल रैंडम एक्सेस रीड ओनली मेमोरी

सिमुलेशन

कुछ हद तक ASCII कला संस्करण की तरह, समय-चरणों का विचार होगा। दूसरे संस्करण में, एक समय-चरण एक अपेक्षाकृत बड़ी मात्रा में समय था: जहाज एक ही समय-चरण में ग्रह के गुरुत्वाकर्षण से परे यात्रा कर सकता है। यहां, समय-चरण बड़ी दूरी के कारण समय की एक छोटी इकाई है। हालांकि, एक बड़ा अंतर कोशिकाओं का गैर-अस्तित्व है। अंतरिक्ष यान की वर्तमान स्थिति और वेग अस्थायी बिंदु संख्याओं के साथ-साथ गुरुत्वाकर्षण बल में शामिल होंगे। एक और परिवर्तन यह तथ्य है कि ग्रहों का आकार अब बहुत बड़ा है।

सिमुलेशन में तीन ग्रह तक होंगे। तीनों में एक विशिष्ट स्थान, त्रिज्या और गुरुत्वाकर्षण होगा। प्रत्येक ग्रह के लिए गुरुत्वाकर्षण एक वेक्टर है जो ग्रह के केंद्र की ओर सीधे एक बल देता है। इस सदिश की ताकत को खोजने का सूत्र है (Gravity)/(Distance**2), जहां जहाज से केंद्र के केंद्र तक की सटीक दूरी है। इसका मतलब यह है कि गुरुत्वाकर्षण कहां तक ​​पहुंच सकता है इसकी कोई सीमा नहीं है।

किसी भी विशिष्ट समय में, अंतरिक्ष यान में एक वेग होता है, जो कि दूरी और कोण है जो उसने अंतिम समय-चरण से अब तक यात्रा की थी। जहाज की भी गति है। वह दूरी जो वर्तमान समय-चरण और अगले के बीच की यात्रा करेगी, उसके स्थान पर उसके सभी गुरुत्वाकर्षण वेगों को जोड़कर उसके वर्तमान वेग का योग है। यह अंतरिक्ष यान का नया वेग बन जाता है।

प्रत्येक सिमुलेशन में 10000 समय चरणों की समय सीमा होती है। यदि अंतरिक्ष यान किसी ग्रह के अंदर यात्रा करता है (यह ग्रह की त्रिज्या की तुलना में ग्रह के केंद्र के करीब है), तो यह उस ग्रह में दुर्घटनाग्रस्त हो जाता है। यदि अंतरिक्ष यान सिमुलेशन के अंत तक किसी भी ग्रह में दुर्घटनाग्रस्त नहीं होता है, तो यह गुरुत्वाकर्षण से बचने के लिए माना जाता है। यह संभावना नहीं है कि जहाज को पूरी तरह से संरेखित किया जा सकता है कि यह 10001 वें समय-कदम पर दुर्घटनाग्रस्त होने के दौरान 10000 समय-चरणों के लिए कक्षा में रहने का प्रबंधन करता है।

इनपुट

इनपुट STDIN के लिए चार लाइनें होगी। प्रत्येक पंक्ति में चार अल्पविराम-सीमांकित संख्याएँ होती हैं। यहाँ संख्याओं का प्रारूप है:

ShipLocX,ShipLocY,ShipVelX,ShipVelY
Planet1LocX,Planet1LocY,Planet1Gravity,Planet1Radius
Planet2LocX,Planet2LocY,Planet2Gravity,Planet2Radius
Planet3LocX,Planet3LocY,Planet3Gravity,Planet3Radius

यदि तीन से कम ग्रह हैं, तो सभी मानों के लिए बचे हुए लाइनों को शून्य से भर दिया जाएगा। यहाँ एक उदाहरण इनपुट है:

60,0,0,10
0,0,4000,50
100,100,4000,50
0,0,0,0

इसका मतलब है कि अंतरिक्ष यान (60,0) पर स्थित है और 10 इकाइयों / समय-चरण की दर से सीधे "अप / उत्तर" यात्रा कर रहा है। दो ग्रह हैं, एक (0,0) पर स्थित है और एक (100,100) पर। दोनों में ४००० का गुरुत्वाकर्षण और ५० का त्रिज्या है। हालांकि ये सभी पूर्णांक हैं, लेकिन ये हमेशा पूर्णांक नहीं होंगे।

उत्पादन

आउटपुट एक एकल शब्द होगा जो यह बताने के लिए होगा कि स्पेसशिप क्रैश हुआ है या नहीं। यदि जहाज दुर्घटनाग्रस्त हो जाता है, तो प्रिंट करें crash। अन्यथा, प्रिंट करें escape। यहाँ उपरोक्त इनपुट के लिए अपेक्षित आउटपुट है:

crash

आप सोच रहे होंगे कि ऐसा क्या हो गया। यहां एक पास्टिबिन पोस्ट है जिसमें स्पेसशिप के लिए एक विस्तृत उड़ान लॉग है। लोगों को इस घटना की कल्पना करने में मदद करने के लिए नंबर बहुत अच्छे नहीं हैं, इसलिए यहां ऐसा हुआ है: अंतरिक्ष यान पहले ग्रह के गुरुत्वाकर्षण से बचने के लिए (इसके पश्चिम में) दूसरे ग्रह के गुरुत्वाकर्षण की मदद से (इसके उत्तर-पूर्व में) प्रबंधन करता है। यह उत्तर की ओर बढ़ता है और फिर दूसरे ग्रह के पश्चिम में थोड़ा सा गुजरता है, बमुश्किल इसे गायब करता है। यह फिर ग्रह के उत्तरी हिस्से के चारों ओर घटता है और दूसरे ग्रह के पूर्वी हिस्से में दुर्घटनाग्रस्त हो जाता है।

परीक्षा के लिए कुछ और मामले

60,0,10,-10
0,0,2000,50
100,100,1357.9,47.5
0,0,0,0

भागने (उलटा वर्ग कानून के कारण, 2000 ज्यादा गुरुत्वाकर्षण नहीं है यदि आप 60 यूनिट दूर हैं)

0,0,0,0
100,100,20000,140
-50,-50,50,50
-100,-100,50,50

दुर्घटना (पहला ग्रह अत्यंत विशाल और अत्यंत निकट है)

0,0,0,0
0,0,0,0
0,0,0,0
0,0,0,0

पलायन (यह एक किनारे का मामला है: कोई ग्रह नहीं हैं और एक सीधी व्याख्या यह बताएगी कि अंतरिक्ष यान सीधे ग्रहों के ऊपर है)

नियम, प्रतिबंध और नोट्स

यह कोड गोल्फ है। मानक कोड गोल्फ नियम लागू होते हैं। आपका प्रोग्राम केवल मुद्रण योग्य ASCII वर्णों में लिखा जाना चाहिए। आप किसी भी प्रकार के बाहरी डेटाबेस तक नहीं पहुँच सकते। आप किसी भी भाषा में प्रविष्टियाँ लिख सकते हैं (एक से बढ़कर एक जो इस चुनौती को हल करने की दिशा में विशेष है)।

अंत संचरण


Rofl DEEEPRAROM! - ग्रहों की गुरुत्वाकर्षण बातचीत को नकली माना नहीं जाता है? अभी भी बिल्कुल संख्यात्मक रूप से महंगा नहीं है, लेकिन काफी उचित है। - मुझे लगता है कि संदर्भ सिमुलेशन मानक रन-कुट्टा 4 के क्रम एकीकरण का उपयोग करता है, और हमारे कार्यक्रम को समान परिणाम बनाना होगा?
काउंटरक्लॉविस

मुझे पता नहीं चला है कि कैसे कई ग्रहों को परस्पर क्रिया करना है। समस्या यह है कि वे तुरंत एक दूसरे में दुर्घटनाग्रस्त हो जाएंगे। इसे ठीक करने के लिए अनुकरण के पैमाने को अविश्वसनीय रूप से उछालना होगा।
PhiNotPi

रन-कुट्टा विधि के रूप में, मैं ईमानदारी से गणित में अभी तक उन्नत नहीं हूं। :( मैंने जहाज के वर्तमान स्थान पर गुरुत्वाकर्षण की गणना करने और जहाज के वेग में इसे जोड़ने के लिए क्या किया था, जहाज के नए वेग को उत्पन्न करता है। मैंने प्रत्येक समय कदम के लिए ऐसा किया। मुझे पता है कि यह पूरी तरह से सही नहीं है, लेकिन मुझे पता चला। जहाज के शुरुआती वेग और ग्रहों के गुरुत्वाकर्षण को 10 से विभाजित करने से अनुकार की सटीकता बढ़ जाती है।
PhiNotPi

आह, वह यूलर का तरीका होगा। छोटे पर्याप्त समय के लिए कदम है कि एक सटीक है, भी; अभी तक रन-कुट्टा या कुछ और अधिक परिष्कृत आईएमओ को लागू करने के लिए अधिक दिलचस्प होगा। हो सकता है कि मैं अपनी खुद की चुनौती तैयार करूं, मैं आसानी से संतुष्ट नहीं हो सकता ...
को बंद करना बंद कर दिया।

@leftaroundabout आगे बढ़ो। आप "अंतर समीकरणों का उपयोग करके पूरे सौर मंडल का अनुकरण" या ऐसा कुछ फैंसी बना सकते हैं, या शायद तीसरे आयाम में जोड़ सकते हैं।
PhiNotPi

जवाबों:


6

पायथन, 178 170 चार्ट

p=input
a,b,c,d=p()
x=a+b*1j
v=c+d*1j
P=(p(),p(),p())
R='escape'
for i in' '*10000:
 for a,b,g,r in P:
  d=a+b*1j-x;v+=g*d/abs(d)**3
  if abs(d)<r:R='crash'
 x+=v
print R

2
आप आज एक जटिल मूड में हैं, क्या आप नहीं हैं?
चालू करना बंद कर दिया

8
हाँ, iहूँ ....
कीथ रान्डेल

मैं उसका मुकाबला कैसे कर सकता हूं?
नील

@ नील: कोड, या मजाकिया भोज?
कीथ रान्डेल

खैर कोड। मजाकिया भोज मैं साथ रख सकते हैं।
नील

2

Golfrun / GolfScript ?, 243 232 रु

10000:M;n%(','%2/{{~}%}/{{M*}%}:_~:v;_:x;'escape':R;{[','%2/{{~M*}%}/]}%:P;
M,{;P{~\x{0\-}%{+~@+@@+[\]}:|~:d.[~0\-]{[+.2%~*\.-2%~*@\-\.3%~*\(;);~*+]}:&~);~sqrt:z
..**\~d@[`~0]\&@M.*/\{1$/}%v|:v;;z\<{'crash':R;}{}if}/x v|:x;}/R puts

Golfrun एक ऐसी भाषा है जिस पर मैं काम कर रहा हूं, जिसका जन्म GolfScript C दुभाषिया के रूप में हुआ है, लेकिन जल्द ही किसी और को छोड़ दिया गया; हालाँकि मैंने इस कोड को जान-बूझकर विशिष्ट गोल्फरन सुविधाओं का उपयोग किए बिना लिखा है (को छोड़कर sqrt), मूल गोल्फस्क्रिप्ट के साथ परीक्षण विफल हो गया (मुझे मूल कोड में sqrt सुविधा को जोड़ना पड़ा, मैं रूबी गुरु नहीं हूं लेकिन मेरा मानना ​​है कि समस्या है मेरी नहीं)।

इस समाधान के साथ पहली समस्या यह है कि Golfrun, GolfScript के रूप में, कोई फ़्लोटिंग पॉइंट गणित नहीं है। यह संख्याओं को बढ़ाते हुए "सिम्युलेटेड" है, उम्मीद है कि सही तरीके से (लेकिन मैं 100% आश्वस्त नहीं हूं कि मैंने इसे सुसंगत रूप से किया है)। फिर भी, समाधान इनपुट के रूप में फ्लोटिंग पॉइंट नंबरों को संभालता नहीं है, इसलिए मुझे केवल पूर्णांक संख्या रखने के लिए उन्हें हाथ से बढ़ाना पड़ा।

पायथन कोड में एल्गोरिथ्म को लागू करने की कोशिश करते हुए, मैंने जटिल गणित के बिट्स को भी "सामान्य" तरीके से लागू किया है। इस से बचने के लिए एल्गोरिथ्म में हेरफेर, और / या जब भी संभव हो, परिभाषाओं में देरी करना, अन्य वर्णों को बचा सकता है ...

मुझे कैसे पता चलेगा कि यह कोड काम करता है? वास्तव में, मुझे यकीन नहीं है कि यह करता है! लेकिन उदाहरण के लिए इनपुट के रूप में ("बिंदुओं को हटाने के बाद" जहां वे दिखाई देते हैं), इसने अपेक्षित परिणाम लिखे, सिवाय "कोने के मामले" (जो पायथन में भी एक अपवाद को बढ़ाता है) ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.