pengantar
tl; dr
Terus menampilkan jarak saat ini dari Bumi ke Matahari.
Sederhana, orbit Bumi di sekitar Matahari adalah elips. Jadi jarak yang sebenarnya antara keduanya terus berubah. Jarak ini dapat dihitung untuk hari tertentu menggunakan rumus ini :
Persamaan dapat dibagi menjadi bagian-bagian 2 berikut :
1
mewakili 1 AU (unit astronomi), sama dengan149,597,870.691 km
0.01672
adalah eksentrisitas orbit antara Bumi dan Mataharicos
tentu saja fungsi cosinus, tetapi dengan argumen dalam derajat daripada radian0.9856
adalah 360 ° / 365,256363 hari , rotasi penuh dalam satu tahun, di mana365.256363
panjang tahun sidereal, dalam rata-rata hari matahariday
adalah hari dalam setahun[1-365]
4
mewakili offset ke perihelion , yaitu antara 4 dan 6 Januari
Formula ini membutuhkan satu hari penuh tetapi untuk tujuan tantangan ini - hasil yang terus menerus - Anda harus lebih akurat; atau tidak banyak yang akan terjadi sampai hari berikutnya. Cukup tambahkan persentase dari waktu lampau ke hari saat ini, seperti 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Beberapa Contoh:
- 1 Januari, 23:59:59
1.99998842592593
- 1 Januari, 18:00:00
1.75
- 1 Januari, 12:00:00
1.50
- 1 Januari, 06:00:00
1.25
Memasukkan
Tantangan ini tidak memiliki input.
Jika bahasa Anda tidak bisa mendapatkan waktu saat ini, Anda bisa mendapatkannya sebagai masukan untuk program Anda. Input yang valid adalah cap waktu atau string tanggal-waktu lengkap yang paling sesuai dengan bahasa. Melewati hari ini saja (seperti 5
untuk 5 Januari atau 5.25
untuk hari yang sama pukul 6) tidak diperbolehkan.
Keluaran
Keluarkan jarak saat ini dari Bumi ke Matahari:
- Keluarkan nilai dalam
km
. - Perbarui nilainya setidaknya setiap detik .
Contoh output:
152098342
Jika tidak meningkatkan jumlah byte Anda, Anda juga dapat mencetak hasilnya:
152,098,342
152,098,342 km
Persyaratan
- Anda dapat menulis suatu program atau fungsi. Jika ini adalah fungsi anonim, harap sertakan contoh cara memintanya.
- Ini adalah kode-golf sehingga jawaban terpendek dalam byte menang.
- Celah standar tidak diijinkan.
Contoh implementasi
Saya sudah menyiapkan contoh implementasi dalam JavaScript. Ini tidak kompetitif atau golf.
// 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 Untuk tidak menambah kerumitan tanpa alasan, Anda tidak perlu mengubah waktu lokal Anda ke UTC. Jika Anda menggunakan UTC, harap tambahkan catatan untuk jawaban Anda.
2 Untuk lebih jelasnya lihat " Jarak Bumi-Matahari pada hari tertentu dalam setahun " di Fisika
Math.cos
menggunakan radian. Dan karena rumus ini tampaknya sangat perkiraan, Anda harus jelas tentang bagaimana jawaban harus diverifikasi.