Вступ
тл; д-р
Постійно виводить поточну відстань від Землі до Сонця.
Спрощено, орбіта Землі навколо Сонця - це еліпс. Тож фактична відстань між обома постійно змінюється. Ця відстань може бути розрахована за будь-який день за цією формулою :
Рівняння можна розділити на наступні частини 2 :
1
являє собою 1 АС (астрономічна одиниця), дорівнює149,597,870.691 km
0.01672
- орбітальний ексцентриситет між Землею та Сонцемcos
це, звичайно, косинусна функція, але з аргументом у градусах, а не радіанах0.9856
становить 360 ° / 365.256363 дні , повна ротація за один рік, де365.256363
тривалість бічного року в середніх сонячних дняхday
- день року[1-365]
4
являє собою зсув до перигелію , який припадає на 4 - 6 січня
Формула займає цілий день, але для цього завдання - постійного виходу - ви повинні бути більш точними; або нічого не відбудеться до наступного дня. Просто додайте відсоток минулого часу до поточного дня, як 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Кілька прикладів:
- 1 січня, 23:59:59
1.99998842592593
- 1 січня, 18:00:00
1.75
- 1 січня, 12:00:00
1.50
- 1 січня, 06:00:00
1.25
Вхідні дані
Цей виклик не має ніякого вкладу.
Якщо ваша мова не може отримати поточний час, ви можете отримати її як вхід до вашої програми. Дійсні введення - це часові позначки або повні рядки дати та часу, які найкраще відповідають мові. Самостійно проходити поточний день (наприклад, 5
5 січня або 5.25
в той же день о 6 годині).
Вихідні дані
Виведіть поточну відстань від Землі до Сонця:
- Виведіть значення в
km
. - Оновіть значення принаймні щосекунди .
Приклад виводу:
152098342
Якщо це не збільшує кількість байтів, ви також можете надрукувати результат:
152,098,342
152,098,342 km
Вимоги
- Можна написати програму або функцію. Якщо це анонімна функція, додайте приклад, як викликати її.
- Це кодовий гольф, тому найкоротша відповідь у виграші байтів.
- Стандартні лазівки заборонені.
Приклад реалізації
Я підготував приклад реалізації в JavaScript. Це ні конкурентоспроможний, ні гольф.
// 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 Щоб не надмірно збільшити складність, вам не доведеться перетворювати свій місцевий час у UTC. Якщо ви використовуєте UTC, додайте примітку до своєї відповіді.
2 Докладніше див. " Відстань Земля - Сонце в даний день року " на сторінці " Фізика"
Math.cos
використовує радіани. А оскільки ця формула здається дуже приблизною, вам доведеться зрозуміти, як відповідати, щоб перевірити.