Einführung
tl; dr
Kontinuierliche Ausgabe der aktuellen Entfernung von der Erde zur Sonne.
Vereinfacht ausgedrückt ist die Erdumlaufbahn um die Sonne eine Ellipse. Der tatsächliche Abstand zwischen beiden ändert sich also ständig. Diese Distanz kann für einen bestimmten Tag nach folgender Formel berechnet werden :
Die Gleichung kann in die folgenden Teile 2 aufgeteilt werden :
1
entspricht 1 AE (astronomische Einheit)149,597,870.691 km
0.01672
ist die Exzentrizität der Umlaufbahn zwischen Erde und Sonnecos
ist natürlich die Kosinusfunktion, aber mit Argumenten in Grad und nicht im Bogenmaß0.9856
beträgt 360 ° / 365,256363 Tage , eine volle Umdrehung in einem Jahr, wobei365.256363
die Länge eines Sternjahres in mittleren Sonnentagen istday
ist der Tag des Jahres[1-365]
4
stellt den Versatz zum Perihel dar , der zwischen dem 4. und 6. Januar liegt
Die Formel dauert einen ganzen Tag, aber für diese Herausforderung - eine kontinuierliche Ausgabe - müssen Sie genauer sein; oder bis zum nächsten Tag wird nicht viel passieren. Fügen Sie einfach den Prozentsatz der vergangenen Zeit zum aktuellen Tag hinzu, z. B. 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Einige Beispiele:
- 1. Januar, 23:59:59
1.99998842592593
- 1. Januar, 18:00:00 Uhr
1.75
- 1. Januar, 12:00:00
1.50
- 1. Januar, 06:00:00
1.25
Eingang
Diese Herausforderung hat keine Eingabe.
Wenn Ihre Sprache die aktuelle Zeit nicht abrufen kann, können Sie sie als Eingabe für Ihr Programm verwenden. Gültige Eingaben sind Zeitstempel oder vollständige Datums- / Uhrzeitzeichenfolgen , die der Sprache am besten entsprechen. Das Übergeben des aktuellen Tages allein (wie am 5
5. Januar oder 5.25
am selben Tag um 6 Uhr) ist nicht erlaubt.
Ausgabe
Geben Sie die aktuelle Entfernung von der Erde zur Sonne aus:
- Den Wert in ausgeben
km
. - Aktualisieren Sie den Wert mindestens jede Sekunde .
Beispielausgabe:
152098342
Wenn es Ihre Byteanzahl nicht erhöht, können Sie das Ergebnis auch hübsch ausdrucken:
152,098,342
152,098,342 km
Bedarf
- Sie können ein Programm oder eine Funktion schreiben. Wenn es sich um eine anonyme Funktion handelt, geben Sie bitte ein Beispiel für den Aufruf an.
- Dies ist Code-Golf, also gewinnt die kürzeste Antwort in Bytes.
- Standardlücken sind nicht zulässig.
Beispielimplementierung
Ich habe eine Beispielimplementierung in JavaScript vorbereitet. Es ist weder wettbewerbsfähig noch golfen.
// 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 Um die Komplexität nicht unangemessen zu erhöhen, müssen Sie Ihre Ortszeit nicht in UTC umrechnen. Wenn Sie UTC verwenden, fügen Sie Ihrer Antwort eine Notiz hinzu.
2 Weitere Informationen finden Sie unter " Erde-Sonne-Abstand an einem bestimmten Tag des Jahres " bei Physik
Math.cos
Radiant verwendet. Und da diese Formel sehr ungefähr zu sein scheint , müssen Sie sich darüber im Klaren sein, wie die Antworten überprüft werden sollen.