কোড গল্ফ: মহাকাশযানের ভাগ্য কী? [ভাসমান পয়েন্ট সংস্করণ]


12

এই প্রশ্নটি ASCII আর্ট সংস্করণের চেয়ে কিছুটা শক্ত। কোন শিল্প নেই, এবং এখন আপনি কিছু ভাসমান পয়েন্ট পাটিগণিত করতে হবে!

চ্যালেঞ্জ

ইউএসএস স্ট্যাকএক্সচেঞ্জ গ্রহের সিগ্রি -00 ডিএলএফ-এর গ্রাভিটি ক্ষেত্রের মধ্য দিয়ে যাচ্ছিল যখন বোর্ডে একটি জ্যোতির্বিজ্ঞান বিস্ফোরণ ঘটে। জাহাজের প্রধান প্রোগ্রামিং অফিসার হিসাবে, আপনার সিজি -00 ডিএলএফ-এর সৌরজগতে জমি ক্র্যাশ করতে বাধ্য করা হবে কিনা তা পূর্বাভাস দেওয়ার জন্য আপনার জাহাজের ট্রাজেক্টোরির অনুকরণ করা আপনার কাজ। বিস্ফোরণের সময়, আপনার জাহাজটি বেশ ক্ষতিগ্রস্থ হয়েছিল। স্পেসশিপের সীমিত ফ্রি DEEEPAROM * এর কারণে আপনার প্রোগ্রামটি যথাসম্ভব কম অক্ষরে লিখতে হবে।

* ডায়নামিক্য এক্সিকিউটেবল ইলেক্ট্রনিকালি ইরেসেবল প্রোগ্রামেবল এলোমেলো অ্যাক্সেস রিড ওয়ান মেমরি

সিমুলেশন

কিছুটা ASCII আর্ট সংস্করণের মতো, সময়-পদক্ষেপের ধারণা থাকবে। অন্য সংস্করণে, একটি সময়-পদক্ষেপটি তুলনামূলকভাবে বড় পরিমাণের সময় ছিল: জাহাজটি কোনও একক সময়কালে কোনও গ্রহের মাধ্যাকর্ষণ ছাড়িয়ে পথ ভ্রমণ করতে পারে। জড়িত বৃহত্তর দূরত্বের কারণে এখানে সময়-পদক্ষেপটি একটি অনেক ছোট ইউনিট। তবে একটি বড় পার্থক্য হ'ল কোষের অস্তিত্ব। মহাকাশযানের বর্তমান অবস্থান এবং বেগ জড়িত মহাকর্ষীয় বাহিনীর পাশাপাশি ভাসমান পয়েন্ট সংখ্যা হবে। আর একটি পরিবর্তন হ'ল গ্রহগুলির আকার এখন অনেক বড়।

সিমুলেশনটিতে তিনটি গ্রহ থাকবে। তিনটিরই একটি নির্দিষ্ট অবস্থান, ব্যাসার্ধ এবং মাধ্যাকর্ষণ থাকবে। প্রতিটি গ্রহের মাধ্যাকর্ষণটি একটি ভেক্টর যা সরাসরি গ্রহের কেন্দ্রের দিকে একটি শক্তি প্রয়োগ করে। এই ভেক্টরের শক্তি খুঁজে পাওয়ার সূত্রটি হ'ল (Gravity)/(Distance**2), যেখানে দূরত্বটি জাহাজ থেকে গ্রহের কেন্দ্রের ঠিক দূরত্ব is এর অর্থ হল মহাকর্ষ যেখানে পৌঁছতে পারে তার কোনও সীমা নেই।

যে কোনও নির্দিষ্ট সময়ে, স্পেসশিপটির একটি বেগ থাকে, এটি শেষ সময় থেকে এখন অবধি যে দূরত্ব এবং কোণে ভ্রমণ করেছিল। জাহাজটিরও গতি আছে। এটি বর্তমান সময়-পদক্ষেপ এবং পরবর্তীটির মধ্যে যে দূরত্বটি ভ্রমণ করবে এটি হ'ল তার বর্তমান গতিবেগের যোগফল এটির অবস্থানের মহাকর্ষ ভেক্টরগুলির সাথে যুক্ত হয়ে। এটি স্পেসশিপের নতুন বেগ হয়ে যায়।

প্রতিটি সিমুলেশনের 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)। উভয়ের মাধ্যাকর্ষণ 4000 এবং 50 এর ব্যাসার্ধ রয়েছে these যদিও এগুলি সমস্তই পূর্ণসংখ্যা হলেও তারা সবসময় পূর্ণসংখ্যার হবে না।

আউটপুট

স্পেসশিপ ক্র্যাশ হয়েছে কিনা তা জানার জন্য আউটপুট STDOUT- এর একক শব্দ হবে। যদি জাহাজটি ক্র্যাশ অবতরণ করে তবে মুদ্রণ করুন 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 অক্ষরে লেখা উচিত। আপনি কোনও ধরণের বাহ্যিক ডাটাবেস অ্যাক্সেস করতে পারবেন না। আপনি যে কোনও ভাষায় এন্ট্রি লিখতে পারেন (এই চ্যালেঞ্জটি সমাধানে বিশেষায়িত এক ব্যতীত)।

শেষ ট্রান্সমিশন


রোফেল ডিপ্রিপারম! - গ্রহের মহাকর্ষীয় মিথস্ক্রিয়া অনুকরণ করার কথা নয়? এখনও ততক্ষণে সংখ্যায় ব্যয়বহুল নয়, তবে যথেষ্ট fair - আমি ধরে নিই যে রেফারেন্স সিমুলেশনটি স্ট্যান্ডার্ড রঞ্জ-কোট্টা ৪ র্থ অর্ডার একীকরণ ব্যবহার করে এবং আমাদের প্রোগ্রামকে অবশ্যই সমমানের ফলাফল তৈরি করতে হবে?
বন্ধ হয়েছে

আমি একাধিক গ্রহকে কীভাবে ইন্টারঅ্যাক্ট করতে হবে তা বুঝতে পারিনি। সমস্যাটি হ'ল তারা অবিলম্বে একে অপরের সাথে ক্রাশ হওয়ার ঝুঁকির দিকে ঝুঁকবে। এটি স্থির করতে অবিশ্বাস্যভাবে সিমুলেশনের স্কেল বাম্পিংয়ের প্রয়োজন হবে।
PhiNotPi

রানেজ-কত্তা পদ্ধতি হিসাবে, আমি সত্যিই গণিতে এখনও উন্নত নই। :( আমি যা করেছি তা ছিল জাহাজের বর্তমান অবস্থানের মহাকর্ষ গণনা করা এবং জাহাজটির নতুন গতিবেগ উত্পন্ন করে জাহাজের গতিবেগের সাথে এটি যুক্ত করা। আমি প্রতিটি সময় পদক্ষেপের জন্য এটি করেছি I আমি জানি যে এটি সম্পূর্ণ সঠিক নয় তবে আমি খুঁজে পেয়েছি out যে জাহাজের শুরু বেগ এবং গ্রহদের মাধ্যাকর্ষণ 10 ভাগ করে
দিলে

আহ, এটাই হবে অয়লারের পদ্ধতি। ছোট পর্যাপ্ত সময় পদক্ষেপের জন্য যেটি সঠিকও; তবুও আইএমও বাস্তবায়নের জন্য রঞ্জ-কোট্টা বা আরও কিছু পরিশীলিত জিনিস আরও আকর্ষণীয় হবে। হতে পারে আমার নিজের চ্যালেঞ্জটি তৈরি করা উচিত, আমি সহজেই সন্তুষ্টিজনক বলে মনে করতে পারি না ...
বন্ধ হয়ে গেছে

এগিয়ে যান আপনি "ডিফারেনশিয়াল সমীকরণগুলি ব্যবহার করে পুরো সৌরজগতের অনুকরণ" বা এর মতো অভিনব কিছু তৈরি করতে পারেন বা তৃতীয় মাত্রায় যুক্ত করতে পারেন।
PhiNotPi

উত্তর:


6

পাইথন, 178 অক্ষর

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আমি ....
কীথ র্যান্ডাল 21

আমি কীভাবে এর সাথে প্রতিযোগিতা করতে পারি?
নীল

@ নীল: কোড, বা মজাদার ব্যানার?
কিথ র্যান্ডাল

ভাল কোড। মজাদার ব্যানারটি আমি ধরে রাখতে পারি।
নীল

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

গল্ফরুন হ'ল এমন একটি ভাষা যা আমি কাজ করছি, গল্ফস্ক্রিপ্ট সি দোভাষী হিসাবে জন্ম নিয়েছে, তবে শীঘ্রই সেখান থেকে দূরে চলে গেছে; যদিও আমি জেনেশুনে নির্দিষ্ট গল্ফরুন বৈশিষ্ট্যগুলি ব্যবহার না করে এই কোডটি লিখেছি (ব্যতীতsqrt ), মূল গল্ফস্ক্রিপ্টের সাথে পরীক্ষাটি ব্যর্থ হয়েছিল (মূল কোডটিতে স্কয়ার্ট বৈশিষ্ট্যটি যুক্ত করতে হয়েছিল, আমি কোনও রুবি গুরু নই তবে আমি বিশ্বাস করি যে সমস্যাটি আমার টুইট না)।

এই সমাধানটির সাথে প্রথম সমস্যাটি হ'ল গল্ফ্রন, গল্ফস্ক্রিপ্ট হিসাবে, কোনও ভাসমান পয়েন্ট গণিত নেই। আশা করা যায় যে এটি সঠিক সংখ্যায় প্রত্যাশিতভাবে "সিমুলেটেড" (তবে আমি এটি 100% আত্মবিশ্বাসী নই যে আমি এটি সুসংগতভাবে করেছি)) তবুও, সমাধানটি ভাসমান পয়েন্ট সংখ্যাগুলিকে ইনপুট হিসাবে পরিচালনা করে না, তাই কেবলমাত্র পূর্ণসংখ্যার সংখ্যাগুলি পাওয়ার জন্য আমাকে এগুলি হাতে বাড়িয়ে তুলতে হয়েছিল।

পাইথন কোডে অ্যালগরিদম বাস্তবায়নের চেষ্টা করে আমি জটিল গণিতের বিটকে বরং "সাধারণ" উপায়ে প্রয়োগ করেছি। এটি এড়ানোর জন্য অ্যালগরিদমকে হেরফের করা এবং / অথবা যখনই সম্ভব ইনলাইন করা, সংজ্ঞাগুলিতে বিলম্ব করা, অন্যান্য অক্ষরগুলি সংরক্ষণ করতে পারে ...

এই কোডটি কীভাবে কাজ করে তা আমি কীভাবে জানব? আসলে, আমি নিশ্চিত যে এটি এটি না! তবে ইনপুট হিসাবে উদাহরণগুলি প্রদান করে (যেখানে তারা উপস্থিত হবে "মুছে ফেলার" পরে) এটি "কর্নার কেস" (পাইথনেও ব্যতিক্রম ঘটায়) বাদে প্রত্যাশিত ফলাফল লিখেছিল ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.