Giới thiệu
tl; dr
Liên tục xuất khoảng cách hiện tại từ Trái đất đến Mặt trời.
Đơn giản hóa, quỹ đạo của Trái đất quanh Mặt trời là một hình elip. Vì vậy, khoảng cách thực tế giữa cả hai liên tục thay đổi. Khoảng cách này có thể được tính cho bất kỳ ngày nào bằng cách sử dụng công thức này :
Phương trình có thể được chia thành các phần sau 2 :
1
đại diện cho 1 AU (đơn vị thiên văn), bằng149,597,870.691 km
0.01672
là độ lệch tâm quỹ đạo giữa Trái đất và Mặt trờicos
Tất nhiên là hàm cosin, nhưng với đối số theo độ chứ không phải radian0.9856
là 360 ° / 365.256363 ngày , một vòng quay đầy đủ trong một năm, trong đó365.256363
độ dài của một năm thiên văn, tính theo ngày mặt trờiday
là ngày trong năm[1-365]
4
đại diện cho phần bù cho perihelion , nằm trong khoảng từ ngày 4 đến ngày 6 tháng 1
Công thức mất cả ngày nhưng với mục đích của thử thách này - đầu ra liên tục - bạn phải chính xác hơn; hoặc không có gì nhiều sẽ xảy ra cho đến ngày hôm sau. Chỉ cần thêm phần trăm thời gian trong quá khứ vào ngày hiện tại, như 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Một vài ví dụ:
- Ngày 1 tháng 1, 23:59:59
1.99998842592593
- Ngày 1 tháng 1, 18:00:00
1.75
- Ngày 1 tháng 1, 12:00:00
1.50
- 1 tháng 1, 06:00:00
1.25
Đầu vào
Thách thức này không có đầu vào.
Nếu ngôn ngữ của bạn không thể có được thời gian hiện tại, bạn có thể lấy nó làm đầu vào cho chương trình của mình. Đầu vào hợp lệ là dấu thời gian hoặc chuỗi thời gian hoàn thành phù hợp nhất với ngôn ngữ. Không được phép vượt qua ngày hiện tại một mình (như 5
ngày 5 tháng 1 hoặc 5.25
cùng ngày lúc 6 giờ).
Đầu ra
Xuất khoảng cách hiện tại từ Trái đất đến Mặt trời:
- Xuất giá trị trong
km
. - Cập nhật giá trị ít nhất mỗi giây .
Ví dụ đầu ra:
152098342
Nếu nó không tăng số byte của bạn, bạn cũng có thể in kết quả:
152,098,342
152,098,342 km
Yêu cầu
- Bạn có thể viết một chương trình hoặc một chức năng. Nếu đó là một hàm ẩn danh, vui lòng bao gồm một ví dụ về cách gọi nó.
- Đây là mã golf để câu trả lời ngắn nhất trong byte thắng.
- Sơ hở tiêu chuẩn là không được phép.
Ví dụ thực hiện
Tôi đã chuẩn bị một triển khai ví dụ trong JavaScript. Nó không cạnh tranh cũng không phải chơi gôn.
// dayOfYear from http://stackoverflow.com/a/8620357/1456376
Date.prototype.dayOfYear = function() {
var j1= new Date(this);
j1.setMonth(0, 0);
return Math.round((this-j1)/8.64e7);
}
// vars
var e = document.getElementById('view'),
au = 149597870.691,
deg2rad = Math.PI/180,
date = now = value = null;
// actual logic
function calculate() {
date = new Date();
now = date.dayOfYear() + (date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds()) / 864 / 100;
value = 1 - 0.01672 * Math.cos(deg2rad * 0.9856 * (now - 4));
// supported in Firefox and Chrome, unfortunately not in Safari
e.innerHTML = Math.round(value * au).toLocaleString('en-US') + ' km';
setTimeout(calculate, 1000);
}
// let's do this
calculate();
<div id="view"></div>
1 Để không làm tăng sự phức tạp một cách vô lý, bạn không phải chuyển đổi giờ địa phương sang UTC. Nếu bạn sử dụng UTC, vui lòng thêm một ghi chú vào câu trả lời của bạn.
2 Để biết thêm chi tiết, hãy xem " Khoảng cách Trái đất-Mặt trời vào một ngày nhất định trong năm " tại Vật lý
Math.cos
sử dụng radian. Và vì công thức này có vẻ rất gần đúng, bạn sẽ phải rõ ràng về cách xác minh câu trả lời.