Wprowadzenie
tl; dr
Ciągle wysyłaj aktualną odległość od Ziemi do Słońca.
Uproszczona orbita Ziemi wokół Słońca jest elipsą. Rzeczywista odległość między nimi ciągle się zmienia. Odległość tę można obliczyć dla dowolnego dnia za pomocą tego wzoru :
Równanie można podzielić na następujące części 2 :
1
reprezentuje 1 AU (jednostka astronomiczna), jest równy149,597,870.691 km
0.01672
to ekscentryczność orbity między Ziemią a Słońcemcos
jest oczywiście funkcją cosinus, ale z argumentami w stopniach, a nie w radianach0.9856
wynosi 360 ° / 365.256363 dni , pełny obrót w ciągu jednego roku, gdzie365.256363
jest długość roku gwiazdowego, w średnich dniach słonecznychday
jest dniem roku[1-365]
4
reprezentuje przesunięcie w stosunku do peryhelium , które przypada między 4 a 6 stycznia
Formuła trwa cały dzień, ale w celu sprostania temu wyzwaniu - ciągłej wydajności - musisz być bardziej dokładny; albo nic więcej się nie wydarzy do następnego dnia. Po prostu dodaj procent czasu przeszłego do bieżącego dnia, na przykład 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Kilka przykładów:
- 1 stycznia, 23:59:59
1.99998842592593
- 1 stycznia, 18:00:00
1.75
- 1 stycznia, 12:00:00
1.50
- 1 stycznia, 06:00:00
1.25
Wejście
To wyzwanie nie ma wkładu.
Jeśli twój język nie może uzyskać aktualnego czasu, możesz go uzyskać jako dane wejściowe do swojego programu. Poprawne dane wejściowe to znaczniki czasu lub pełne ciągi daty i godziny, które najlepiej pasują do języka. Minięcie bieżącego dnia samemu (jak 5
na 5 stycznia lub 5.25
tego samego dnia o godzinie 6) jest niedozwolone.
Wynik
Wyjście aktualnej odległości od Ziemi do Słońca:
- Podaj wartość w
km
. - Aktualizuj wartość przynajmniej co sekundę .
Przykładowe dane wyjściowe:
152098342
Jeśli nie zwiększy to liczby bajtów, możesz również całkiem wydrukować wynik:
152,098,342
152,098,342 km
Wymagania
- Możesz napisać program lub funkcję. Jeśli jest to funkcja anonimowa, podaj przykład jej wywołania.
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach.
- Standardowe luki są niedozwolone.
Przykładowa implementacja
Przygotowałem przykładową implementację w JavaScript. Nie jest konkurencyjny ani golfowy.
// 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 Aby nieracjonalnie zwiększyć złożoności, nie musisz przeliczać czasu lokalnego na UTC. Jeśli korzystasz z UTC, dodaj notatkę do swojej odpowiedzi.
2 Aby uzyskać więcej informacji, patrz „ Odległość Ziemia-Słońce w danym dniu roku ” w Physics
Math.cos
używa radianów. A ponieważ ta formuła wydaje się bardzo przybliżona, musisz wyjaśnić, w jaki sposób należy weryfikować odpowiedzi.