introduzione
tl; dr
Emetti continuamente la distanza corrente dalla Terra al Sole.
Semplificata, l'orbita della Terra attorno al Sole è un'ellisse. Quindi la distanza effettiva tra i due cambia costantemente. Questa distanza può essere calcolata per un dato giorno usando questa formula :
L'equazione può essere suddivisa nelle seguenti parti 2 :
1
rappresenta 1 UA (unità astronomica), uguale a149,597,870.691 km
0.01672
è l' eccentricità orbitale tra la Terra e il Solecos
è ovviamente la funzione del coseno, ma con argomento in gradi piuttosto che radianti0.9856
è 360 ° / 365.256363 giorni , una rotazione completa in un anno, dove365.256363
è la lunghezza di un anno siderale, in giorni solari mediday
è il giorno dell'anno[1-365]
4
rappresenta la compensazione con il perielio , che è tra il 4 e il 6 gennaio
La formula richiede un'intera giornata ma ai fini di questa sfida - un risultato continuo - devi essere più preciso; o non succederà molto fino al giorno successivo. Aggiungi semplicemente la percentuale del tempo passato al giorno corrente, come 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Alcuni esempi:
- 1 gennaio, 23:59:59
1.99998842592593
- 1 gennaio, 18:00:00
1.75
- 1 gennaio, 12:00:00
1.50
- 1 gennaio, 06:00:00
1.25
Ingresso
Questa sfida non ha input.
Se la tua lingua non è in grado di ottenere l'ora corrente, puoi ottenerla come input per il tuo programma. Gli input validi sono timestamp o stringhe di data e ora complete che si adattano meglio alla lingua. Passare il giorno corrente da solo (come 5
per il 5 gennaio o 5.25
per lo stesso giorno alle 6) non è permesso.
Produzione
Emetti la distanza corrente dalla Terra al Sole:
- Emette il valore in
km
. - Aggiorna il valore almeno ogni secondo .
Esempio di output:
152098342
Se non aumenta il numero di byte, puoi anche stampare piuttosto il risultato:
152,098,342
152,098,342 km
Requisiti
- È possibile scrivere un programma o una funzione. Se si tratta di una funzione anonima, si prega di includere un esempio di come invocarlo.
- Questo è code-golf, quindi la risposta più breve in byte vince.
- Le scappatoie standard non sono ammesse.
Esempio di implementazione
Ho preparato un'implementazione di esempio in JavaScript. Non è né competitivo né 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 Per non aumentare irragionevolmente la complessità, non è necessario convertire l'ora locale in UTC. Se usi UTC, aggiungi una nota alla tua risposta.
2 Per maggiori dettagli, vedi " Distanza Terra-Sole in un determinato giorno dell'anno " in Fisica
Math.cos
utilizza i radianti. E poiché questa formula sembra molto approssimativa, dovrai essere chiaro su come verificare le risposte.