মহাকর্ষ অনুকরণ করা সত্ত্বেও!


9

নোভেন একসাথে মহাকর্ষীয় ক্ষেত্রে বড় উঁচু থেকে ফেলে দেওয়া লাশের গতিবিজ্ঞান অধ্যয়ন করতে চান তবে দুর্ভাগ্যক্রমে তাঁর পর্যাপ্ত উচ্চ স্থানে গিয়ে পড়ার সময় জিনিসগুলি পর্যবেক্ষণ করার প্রযুক্তিগত সম্ভাবনা নেই। তবে বিজ্ঞানের অগ্রগতি কে না দেখতে চায় ... ... চলুন তবে আমরা মাধ্যাকর্ষণ সিমুলেটর তৈরিতে সহায়তা করি!

শারীরিক পটভূমি

একটি বস্তু উচ্চতা থেকে নেমে গেছে h( প্রাথমিক গতি ছাড়াই ) অভিন্ন মহাকর্ষীয় ক্ষেত্রের মধ্যে, বায়ুমণ্ডলীয় প্রভাবগুলিকে অবহেলা করা যেমন ড্রাগ এবং বাতাসের গতিবেগ বৃদ্ধি পায় এবং সময়ের সাথে সাথে ভূমির দিকে গতিতে থাকে। সময়ের একক সময়ে বেগের এই "পরিবর্তনের হার" বলা হয় মহাকর্ষীয় ত্বরণ । পৃথিবী পৃষ্ঠের কাছাকাছি, এটি প্রায় সমানg9.8ms2, তবে এই চ্যালেঞ্জের উদ্দেশ্যে আমরা মানটি ব্যবহার করব 10ms2অর্থ, একক সেকেন্ডে, কোনও বস্তু তার গতিবেগ প্রায় বাড়িয়ে তোলে 10ms। উচ্চতা থাকার কথা বিবেচনা করুনh, যা এর একাধিক 100m এবং সেই উচ্চতাটিকে সমান অন্তর বিভক্ত করে কল্পনা করুন each 100মিটার দীর্ঘ। নোভেন এই ব্যবস্থাগুলির প্রতিটি অন্তরগুলির মধ্য দিয়ে পড়তে কত সময় নেয় তা পরিমাপ করতে চায়, তাই আমরাও গণনা করার লক্ষ্য রেখেছি। আধুনিক কাইনেমেটিক্স - দক্ষতা বাদ দেওয়া - আমাদের জানান যে:

Δhk=vktk+12gtk2
কোথায় ΔhkΔh=100m সমস্ত মান জন্য k আমাদের ক্ষেত্রে, vk আমাদের শুরুতে এটি প্রাথমিক গতিবেগ kth বিরতি এবং tk সময়কাল হয় kth সময়ের ব্যবধান (রেফারেন্সের জন্য, সূচীকরণ শুরু হয়) 0 সঙ্গে v0=0)। আমরা এটাও জানিvk নিম্নলিখিত প্রকাশ আছে:
vk=2g(Δh0+Δh1++Δhk1)=2gkΔh
সংখ্যায়, আমরা পেতে vk=2000kms এবং প্রথম সমীকরণে প্লাগ ইন করা এবং এর জন্য সমাধান করা tk দেয়
(*)tk=25(k+1k)s
সুতরাং বস্তুটি প্রথম বিরতিতে ভ্রমণ করে (k=0) ভিতরে 4.4721s, দ্বিতীয় বিরতি (k=1) ভিতরে 1.8524sএবং আরও ( আরও মান সহ পেস্টবিন )।

চ্যালেঞ্জ

ইনপুট: উচ্চতাh যা থেকে বস্তুটি হয় হিসাবে নিক্ষেপ করা হয়: এর ধনাত্মক পূর্ণসংখ্যার একাধিক 100, h বা অন্তর সংখ্যাN=h100 (তাই হয়) 700 অথবা 7 মানে যে h=700m) - কোনটি আপনার উপর নির্ভর করে।

আউটপুট: উচ্চতা থেকে নেমে আসা একটি পড়ন্ত অবজেক্টের একটি ASCII আর্ট অ্যানিমেশনh (নিচে বিস্তারিত).

একটি আউটপুট ফ্রেমের কাঠামো অবশ্যই নীচে থাকতে হবে:

  • N"গ্রাউন্ড" এর পূর্ববর্তী নিউলাইনগুলি, কমপক্ষে একটি অ-হোয়াইটস্পেস অক্ষর দ্বারা চিহ্নিত (যেমন @) represented মাটির কমপক্ষে একটি চরিত্র অবশ্যই অবজেক্টটির উপর উল্লম্বভাবে পড়ে থাকবে।
  • Xআপনি স্থলটির জন্য বেছে নেওয়া একটিকে বাদ দিয়ে অন্য কোনও অ-সাদা অংশের অক্ষর (যেমন ) অবজেক্টটির প্রতিনিধিত্ব করে ।
  • Allyচ্ছিকভাবে , প্রতিটি রেখার শুরুতে একটি অক্ষর উল্লম্ব অক্ষ বা তার উপর তৈরি প্রাচীরকে উপস্থাপন করেNলাইন। নেতৃস্থানীয় এবং পিছনের যেকোন পরিমাণ স্পেস যতক্ষণ না ফ্রেমগুলির সাথে সামঞ্জস্য থাকে ততই প্রাচীর এবং অবজেক্টের মধ্যে যে কোনও পরিমাণ ফাঁকির পরিমাণ থাকে fine বৈধ ফ্রেমের উদাহরণগুলির মধ্যে 1 টি (এর জন্য) অন্তর্ভুক্তh=700m অথবা N=7):
    | X                                       >
    |                             @           >   A
    |                                         >
    |        or            or           or    > 
    |               O                         >
    |                                         >
    |                                         >
    @@@             ^           -----            &&&
    

অবজেক্টটি অবশ্যই প্রথম ফ্রেমের প্রথম লাইনে শুরু করা উচিত, তারপরে t04.47sআউটপুট ফ্লাশ করা উচিত এবং আপনার প্রোগ্রামটি একই ভার্টিকালটিতে তবে দ্বিতীয় ফ্রেমের পরবর্তী লাইনে অবজেক্টটি প্রদর্শন করা উচিত; তারপর পরt11.85sআউটপুটটি আবার ফ্লাশ করা উচিত এবং আপনার প্রোগ্রামটিকে একই উল্লম্ব ক্ষেত্রে তৃতীয় ফ্রেমে এবং পরবর্তী লাইনে অবজেক্টটি প্রদর্শন করা উচিত, যতক্ষণ না অবজেক্টটি মাটির উপরে লাইনটি না পৌঁছায়। উদাহরণ:

অ্যানিমেশন উদাহরণ

বিধি

  • আউটপুটটি একটি ইন্টারেক্টিভ (ফ্লাশেবল) কনসোল, একটি জিআইএফ, প্রতিটি ফ্রেমের জন্য পৃথক ফাইল বা আউটপুট সম্পর্কিত কিছু যুক্তিসঙ্গত কৌশলতে কিছু পাঠ্য হওয়া উচিত।
  • প্রতিটি ফ্রেমের সম্পূর্ণরূপে শেষ ফ্রেমটি ওভাররাইট করা উচিত এবং একই স্থানে থাকা উচিত।
  • আপনি ধরে নিতে পারেন যে পাঠ্যটি আউটপুট দেওয়ার জন্য সংকলক / দোভাষীর প্রয়োজনীয় সময়টি নগণ্য এবং বর্গাকার শিকড়গুলি গণনা করার জন্য ন্যূনতম যথার্থতা 2 দশমিক স্থানে রয়েছে।
  • এই লুপোলগুলি ডিফল্টরূপে নিষিদ্ধ করা হয়েছে তা নোট নেওয়ার সময় আপনি কোনও মানক পদ্ধতির মাধ্যমে ইনপুট নিতে এবং আউটপুট সরবরাহ করতে পারেন । এই, সুতরাং আপনার পছন্দমতো ভাষাতে আপনি পরিচালনা করতে পারেন এমন কমপক্ষে বাইটগুলিতে কাজটি শেষ করার চেষ্টা করুন ।

1: আমি বৈধ ফ্রেমকে কী বলে গঠন করি সে সম্পর্কে আমি হালকা, কারণ আপনার সমাধানের ক্ষেত্রে যা কিছু উপযুক্ত তা আমি মঞ্জুরি দিতে চাই এবং আমি চ্যালেঞ্জগুলিতে অতিরিক্ত অতিরিক্ত জিনিস যুক্ত করার চেষ্টা করছি না। যদি কিছু অস্পষ্ট থাকে তবে মন্তব্যে জিজ্ঞাসা করুন।

উত্তর:


3

জাভাস্ক্রিপ্ট (ES7) + সিএসএস + এইচটিএমএল, 340 বাইট

f=n=>{o.style.height=n+'em';x.style.animationDuration=(n*20)**.5+'s';o.appendChild(x,x.remove())}
pre{position:relative;border:1px solid;height:5em;overflow:hidden}span{position:absolute;top:0;animation:x 10s cubic-bezier(0.33,0,0.67,0.33)both}@keyframes x{to{top:100%}}
<input type=number value=5 oninput=f(this.value)><pre id=o><span id=x>X

যদি আমার ডানগুলি ঠিক থাকে তবে অ্যানিমেশনের সময়কাল 20এন এবং তারপরে সিএসএস কিউবিক-বেজিয়ার বাকিটি করে।


2

কাঠকয়লা , 28 বাইট

Nθ↓θ⁴Fθ«J²ιPXR⌊×φ×₂²⁰⁻₂⊕ι₂ι 

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। দ্রষ্টব্য: পিছনে স্থান আপনি টিআইওতে বিলম্বটি পর্যবেক্ষণ করতে পারেন তবে আপনি অ্যানিমেশনটি দেখতে পারবেন না যাতে আউটপুট থেকে আপনাকে তা কল্পনা করতে হবে। Nইনপুট হিসাবে নেয় । ব্যাখ্যা:

Nθ

ইনপুট N

↓θ⁴

প্রাচীর এবং স্থলটি মুদ্রণ করুন, যাতে আউটপুটটির আকারটি সামঞ্জস্যপূর্ণ হয়।

Fθ«

প্রতিটি অন্তর উপর লুপ।

J²ιPX

Xউপযুক্ত উচ্চতায় একটি রাখুন ।

R⌊×φ×₂²⁰⁻₂⊕ι₂ι

বর্তমান ক্যানভাসের সামগ্রীগুলি আউটপুট করুন এবং উপযুক্ত সময়ের জন্য অপেক্ষা করুন (নিকটতম মিলিসেকেন্ডে ছাঁটা)।

 

Xএকটি স্থান দিয়ে ওভাররাইট করুন ।


2

পার্ল 6 , 81 বাইট

{say "\e[s{"\n"x$_}-";map {say "\e[u{" \n"x 4.9e-6*$_²}o";sleep .01},^452*.sqrt}

"এটি অনলাইনে চেষ্টা করুন!", কিন্তু টিআইও অ্যানিমেশনটি পরিচালনা করতে পারে না।

ব্যাখ্যা

আমি কিছুটা ভিন্ন পদ্ধতি বেছে নিয়েছি (এবং আমি মনে করি এটি আরও ভাল, যদিও আমি নিশ্চিতভাবে জানি না)। ওপিতে সূত্রের দ্বারা প্রদত্ত সময়ের জন্য ঘুমানোর পরিবর্তে, আমি যথাযথ পরিস্থিতিটি "প্রতি 10 এমএস" এঁকেছি (ind ত্রুটিগুলি দ্বারা প্ররোচিত sleep)।

এর অর্থ হ'ল এক সেকেন্ডে 100 টি ফ্রেম রয়েছে, তাই যদি আমরা ফ্রেম সংখ্যাটি দ্বারা চিহ্নিত করি , এটাই হবে টি=/100। এবং যেহেতু আমরা উল্লম্ব দূরত্বটি 100 মিটার ব্লকে ভাগ করি তাই আমরা উচ্চতাটি লিখতে পারি=100এন, কোথায় এনব্লকের সংখ্যা (একটি ইনপুট হিসাবে দেওয়া)। উচ্চতা সময় ভ্রমণটি দেওয়া হয় =টি2/2, তাই ভ্রমণ ব্লক সংখ্যা

এন=110012টি2=12×10-624,905×10-62
আমাদের যে পরিমাণ ফ্রেম রেন্ডার করতে হবে তা পেতে আমরা এটি উল্টাতে পারি:
=এন4,905×10-6452×এন

এই ফাংশন লিখতে যথেষ্ট। এটি একটি যুক্তি লাগে, রেন্ডার করতে ব্লকের সংখ্যা, যেমনএন। প্রথম, আমরা করি say "\e[s{"\n"x$_}-"। এটি সেভ কার্সর নামে একটি এএনএসআই পলায়নের ক্রম প্রিন্ট করে, তারপরে এটি মুদ্রণ করেএননিউলাইনগুলি এবং তারপরে এটি একটি ড্যাশ (স্থল) এবং একটি নতুন লাইন প্রিন্ট করে। (এটি পার্ল in-এ ডাবল উদ্ধৃতিগুলির দুর্দান্ত বৈশিষ্ট্যটি ব্যবহার করে: আপনি কোঁকড়ানো বন্ধনীগুলির মধ্যে কোডটি লিখে স্ট্রিংয়ের মধ্যে যে কোনও কোডের ফলাফলকে ইনলাইন করতে পারেন in)

এর পরে, আমরা 0 থেকে একটি ক্রম তৈরি করি 452এন(স্বয়ংক্রিয়ভাবে পূর্ণসংখ্যায় ছিন্ন) এটি সহ ^452*.sqrtআমরা ম্যাপ করি। প্রতিটি পুনরাবৃত্তিতে, আমরা একটি আনসাভ কার্সার এএনএসআই ক্রম প্রিন্ট করি (যা কার্সারকে যেখানে সর্বশেষে সংরক্ষণ করা হয়েছিল সেখানে রেখে দেয়), লিখুন4.9×10-62স্ট্রিং "স্পেস + নিউলাইন" (স্বয়ংক্রিয়ভাবে আবার কেটে গেছে) এবং অবশেষে এমন একটি oযা অবজেক্টটিকে বোঝায়। তারপরে আমরা 10 এমএসের জন্য ঘুমাব, ধুয়ে ফেলুন এবং পুনরাবৃত্তি করুন।

স্বয়ংক্রিয়ভাবে কেটে যাওয়ার কারণে, এটি কেবলমাত্র সঠিক কাজ করে the এবং পড়ার পুরো 100 মিটার পরে কেবল "o" স্থানান্তর করে।

ফলস্বরূপ অ্যানিমেশন


1

হাস্কেল, 145 বাইট

import Control.Concurrent
a!b=[a..b]>>"\n"
f h=mapM(\k->putStr("\27[2J"++1!k++'O':k!h++"-")>>threadDelay(round$4472135*(sqrt(k+1)-sqrt k)))[1..h]

একটি এএনএসআই টার্মিনালে চালানো দরকার। ইনপুটটি অন্তরগুলির সংখ্যা।

threadDelayএর প্যারামিটারটি ন্যানোসেকেন্ডে রয়েছে, তাই আক্ষরিকের 4472135চেয়ে ছোট 2*sqrt 5*10^6। দুর্ভাগ্যক্রমে 46**4 = 4477456প্রয়োজনীয় নির্ভুলতার সীমার মধ্যে নেই।


1

পাইথন 2 , 117 120 123 বাইট

-3 বাইট "এক্স ট্রিপল ডট হবেন না" এবং "জনাথন ফ্রেচ" এর জন্য ধন্যবাদ

import time
h=input()
for k in range(h):print'\33[2J'+'\n'*k+'O'+'\n'*(h-k)+'^';time.sleep(2*5**.5*((k+1)**.5-k**.5))

এটি অনলাইন চেষ্টা করুন!

এখানে চিত্র বর্ণনা লিখুন


1
আমার কাছ থেকে +1, ভাল সমাধান! আসল অপ্রিন্টযোগ্য চরিত্রটি ব্যবহার না করে বরং কয়েকটা বাইটের চেয়ে বেশি বাঁচাবেন chr(27)?
মিস্টার এক্সকোডার

@ নোটবিএক্স-ট্রিপলোট এবং যদি কেউ নিজেই চরিত্রটির সঞ্চার না পান, '\33'তবুও খাটো হওয়া উচিত।
জনাথন ফ্রেচ

এছাড়াও, 2*5**.5হয় 20**.5
জনাথন ফ্রেচ


@ এমদাহমৌনে ভাল ... যদি সেই নির্ভুলতা যথেষ্ট ভাল হয় তবে হ্যাঁ।
জনাথন ফ্রেচ

1

সি # (.নেট কোর) , 201 , 180 + 13 = 193 বাইট

সিস্টেম ব্যবহারের প্রয়োজন; 13 অতিরিক্ত বাইট জন্য।

আশ্চর্যের বিষয় হচ্ছে, কনসোল.ক্লায়ার () টিআইওতে আমার জন্য কাজ করছে বলে মনে হয় না। তবে এটি ভিএস ২০১7 এর অধীনে একটি কনসোল অ্যাপে পুরোপুরি চলে।

সম্পাদনা: লুপটি সংক্ষিপ্ত করার জন্য অজ্ঞতার প্রতিমাকে ধন্যবাদ, আমার অপ্রয়োজনীয় ভেরিয়েবল অ্যাসাইন এবং সিস্টেম ব্যবহার করে অপ্রয়োজনীয় নির্দেশ করে; থ্রেডিং; বিবৃতি (ভিএস অনুলিপি থেকে বাকী), এবং নির্দেশ করে যে স্থল প্রয়োজন ছিল! মোট 8 টি বাইট মাটি যুক্ত করে এতদূর গল্ফ করেছে। Ty Ty!

x=>{for(var j=x;j>0;System.Threading.Thread.Sleep((int)(4470*(Math.Sqrt(x-j+1)-Math.Sqrt(x-j--))))){Console.Clear();Console.Write("X".PadLeft(x-j+1,'\n').PadRight(x+1,'\n')+"-");}}

এটি অনলাইন চেষ্টা করুন!

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