Giúp Notwen mô phỏng trọng lực!


9

Notwen muốn nghiên cứu động học của các vật thể ném từ độ cao lớn trong trường hấp dẫn đồng đều, nhưng thật không may, anh ta không có khả năng kỹ thuật để đi đến những nơi đủ cao và quan sát các vật thể trong khi rơi. Nhưng ai lại không muốn thấy những tiến bộ trong khoa học nên ... Hãy giúp Notwen xây dựng một trình giả lập trọng lực!

Bối cảnh vật lý

Một vật rơi từ độ cao h ( không có vận tốc ban đầu ) trong trường hấp dẫn đồng nhất, bỏ qua các hiệu ứng khí quyển như lực cản hoặc gió tăng vận tốc và tăng tốc về phía mặt đất theo thời gian. "Tốc độ thay đổi" của vận tốc trong một đơn vị thời gian được gọi là gia tốc trọng trường . Gần bề mặt Trái đất, nó xấp xỉ bằng g9.8ms2 , nhưng cho mục đích của thử thách này, chúng tôi sẽ sử dụng giá trị10ms2 , nghĩa là trong một giây, một vật tăng vận tốc khoảng10ms . Xem xét có chiều caoh, bội số của100mvà tưởng tượng chia chiều cao đó thành các khoảng bằng nhau, mỗichiều dài100mét. Notwen muốn đo thời gian để vật thể rơi qua từng khoảng thời gian đó, vì vậy đó là điều chúng tôi nhắm đến để tính toán. Hiện đạichuyển động- bỏ qua technicalities - nói với chúng ta rằng:

Δhk=vktk+12gtk2
nơiΔhkΔh=100mcho tất cả các giá trị củaktrong trường hợp của chúng tôi,vklà vận tốc ban đầu vào đầu của chúng tôikthinterval vàtklà khoảng thời gian củakthkhoảng thời gian (để tham khảo, lập chỉ mục bắt đầu từ0vớiv0=0). Chúng tôi cũng biết rằngvkcó biểu thức sau đây:
vk=2g(Δh0+Δh1++Δhk1)=2gkΔh
chương trình số CNC, chúng tôi nhậnvk=2000kms và cắm vào phương trình đầu tiên và giải quyết chotkcho
(*)tk=25(k+1k)s
Vì vậy, đối tượng di chuyển khoảng đầu tiên (k=0) trong4.4721s, khoảng thứ hai (k=1) trong1.8524svà cứ thế (pastebinvới nhiều giá trị hơn).

Các thách thức

Đầu vào: Chiều cao h mà từ đó đối tượng được ném là: bội số nguyên dương của 100 , h hoặc số lượng khoảng N=h100 (vì vậy700hoặc7sẽ có nghĩa làh=700m) - cái nào tùy thuộc vào bạn.

Đầu ra: Một hình ảnh động nghệ thuật ASCII của một vật rơi, rơi từ độ cao h (chi tiết bên dưới).

Cấu trúc của khung đầu ra phải như sau:

  • N dòng mới trước "mặt đất", được biểu thị bằng ít nhất một ký tự không phải khoảng trắng (ví dụ@). Ít nhất một trong số các nhân vật của mặt đất phải nằm trên phương thẳng đứng mà vật thể rơi xuống.
  • Một nhân vật không phải khoảng trắng khác đại diện cho đối tượng (ví dụ X), ngoài nhân vật bạn đã chọn cho mặt đất.
  • Nh=700mN=7
    | X                                       >
    |                             @           >   A
    |                                         >
    |        or            or           or    > 
    |               O                         >
    |                                         >
    |                                         >
    @@@             ^           -----            &&&
    

t04.47st11.85s

Ví dụ hoạt hình

Quy tắc

  • Đầu ra phải là một số văn bản được ghi vào bảng điều khiển tương tác (có thể xóa), GIF, một tệp riêng cho từng khung hoặc một số kỹ thuật đầu ra hợp lý khác.
  • Mỗi khung nên ghi đè hoàn toàn khung cuối cùng và ở cùng một vị trí.
  • Bạn có thể giả sử rằng thời gian cần thiết để trình biên dịch / trình thông dịch xuất văn bản là không đáng kể và độ chính xác tối thiểu được phép để tính toán căn bậc hai là 2 chữ số thập phân.
  • Bạn có thể lấy đầu vào và cung cấp đầu ra thông qua bất kỳ phương thức tiêu chuẩn nào , trong khi lưu ý rằng các lỗ hổng này bị cấm theo mặc định. Đây là , vì vậy hãy cố gắng hoàn thành nhiệm vụ theo ít byte nhất bạn có thể quản lý bằng ngôn ngữ bạn chọn.

1: Tôi khoan dung về những gì tạo thành một khung hợp lệ vì tôi muốn cho phép bất cứ điều gì phù hợp nhất với giải pháp của bạn và tôi không cố gắng thêm những thứ thừa thãi vào thử thách. Nếu bất cứ điều gì không rõ ràng, hãy hỏi trong các ý kiến.

Câu trả lời:


3

JavaScript (ES7) + CSS + HTML, 340 byte

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

20N


2

Than , 28 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Lưu ý: dấu cách. Bạn có thể quan sát độ trễ trên TIO nhưng bạn không thể xem hoạt hình để bạn phải tưởng tượng điều đó từ đầu ra. Lấy Nlàm đầu vào. Giải trình:

Nθ

Đầu vào N.

↓θ⁴

In tường và mặt đất, sao cho hình dạng của đầu ra là nhất quán.

Fθ«

Lặp lại qua từng khoảng.

J²ιPX

Đặt một Xở độ cao thích hợp.

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

Xuất nội dung canvas hiện tại và chờ khoảng thời gian thích hợp (cắt ngắn đến mili giây gần nhất).

 

Ghi đè lên Xbằng một khoảng trắng.


2

Perl 6 , 81 byte

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

"Thử trực tuyến!", Nhưng TIO không thể xử lý hoạt hình.

Giải trình

Tôi đã chọn một cách tiếp cận khác một chút (và tôi nghĩ rằng nó tốt hơn, mặc dù tôi không biết chắc chắn). Thay vì ngủ trong thời gian được đưa ra bởi công thức trong OP, tôi chỉ vẽ tình huống thích hợp "cứ sau 10 ms" (sai số gây ra bởi sleep).

kt=k/100h=100nnth=gt2/2

n=110012gt2=12g×106k24.905×106k2.
k=n4.905×106452×n.

nsay "\e[s{"\n"x$_}-"n

452n^452*.sqrt4.9×106k2o

Do cắt ngắn tự động, nó chỉ thực hiện đúng và di chuyển "o" chỉ sau mỗi 100 m của mùa thu.

kết quả hoạt hình


1

Haskell, 145 byte

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]

Cần phải được chạy trong một thiết bị đầu cuối ANSI. Đầu vào là số lượng khoảng.

threadDelayTham số của tính bằng nano giây, do đó, một chữ 4472135ngắn hơn 2*sqrt 5*10^6. Thật không may 46**4 = 4477456là không nằm trong giới hạn của độ chính xác cần thiết.


1

Python 2 , 117 120 123 byte

-3 byte Nhờ "Đừng là dấu ba chấm" và "Jonathan Frech"

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))

Hãy thử trực tuyến!

nhập mô tả hình ảnh ở đây


1
+1 từ tôi, giải pháp tốt! Không sử dụng ký tự không thể in thực tế sẽ tiết kiệm được một vài byte chứ chr(27)?
Ông Xcoder

@ Don'tbeax-tripledot Và nếu người ta không hiểu rõ về nhân vật, '\33'thì vẫn nên ngắn hơn.
Jonathan Frech

Ngoài ra, 2*5**.520**.5.
Jonathan Frech


@mdahmoune Chà ... Nếu độ chính xác đó đủ tốt, thì có.
Jonathan Frech

1

C # (.NET Core) , 201 , 180 + 13 = 193 byte

Nhu cầu sử dụng Hệ thống; cho 13 byte bổ sung.

Thật kỳ lạ, Console.Clear () dường như không hoạt động với tôi trên TIO. Tuy nhiên, điều này chạy hoàn hảo trong một ứng dụng giao diện điều khiển theo VS2017.

EDIT: Cảm ơn Embodiment of Ignorance vì đã rút ngắn vòng lặp, chỉ ra phép gán biến không cần thiết của tôi và không cần thiết khi sử dụng System.Threading; tuyên bố (còn lại từ sao chép VS), và chỉ ra rằng mặt bằng là bắt buộc! Tổng cộng có 8 byte được đánh gôn cho đến nay với việc bổ sung mặt đất. 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')+"-");}}

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.