Вступление
ТЛ; др
Постоянно выводить текущее расстояние от Земли до Солнца.
Упрощенно, орбита Земли вокруг Солнца является эллипсом. Таким образом, фактическое расстояние между ними постоянно меняется. Это расстояние можно рассчитать для любого данного дня, используя эту формулу :
Уравнение можно разбить на следующие части 2 :
1
представляет 1 AU (астрономическая единица), равно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
использует радианы. И поскольку эта формула кажется очень приблизительной, вам нужно будет четко определить, как нужно проверять ответы.