Introdução
tl; dr
Saída contínua da distância atual da Terra ao Sol.
Simplificado, a órbita da Terra ao redor do Sol é uma elipse. Portanto, a distância real entre ambos muda constantemente. Essa distância pode ser calculada para qualquer dia usando esta fórmula :
A equação pode ser dividida nas seguintes partes 2 :
1
representa 1 AU (unidade astronômica), é igual a149,597,870.691 km
0.01672
é a excentricidade orbital entre a Terra e o Solcos
é obviamente a função cosseno, mas com argumentos em graus, em vez de radianos0.9856
é 360 ° / 365.256363 dias , uma rotação completa em um ano, onde365.256363
é a duração de um ano sideral, em dias solares médiosday
é o dia do ano[1-365]
4
representa o deslocamento para o periélio , que é entre 4 e 6 de janeiro
A fórmula leva um dia inteiro, mas para o objetivo desse desafio - uma saída contínua - você precisa ser mais preciso; ou nada vai acontecer até o dia seguinte. Basta adicionar a porcentagem do tempo passado ao dia atual, como 1 :
day + (h * 3600 + m * 60 + s) / 864 / 100
Alguns exemplos:
- 1 de janeiro, 23:59:59
1.99998842592593
- 1 de janeiro, 18:00:00
1.75
- 1 de janeiro, 12:00:00
1.50
- 1 de janeiro, 06:00:00
1.25
Entrada
Este desafio não tem entrada.
Se o seu idioma não conseguir obter a hora atual, você poderá obtê-la como uma entrada para o seu programa. Entradas válidas são carimbos de data / hora ou seqüências completas de data e hora que melhor se adaptam ao idioma. Passar o dia atual sozinho (como 5
em 5 de janeiro ou 5.25
no mesmo dia às 6 horas) não é permitido.
Saída
Emita a distância atual da Terra ao Sol:
- Emita o valor em
km
. - Atualize o valor pelo menos a cada segundo .
Exemplo de saída:
152098342
Se não aumentar sua contagem de bytes, você também pode imprimir o resultado:
152,098,342
152,098,342 km
Exigências
- Você pode escrever um programa ou uma função. Se for uma função anônima, inclua um exemplo de como invocá-la.
- Este é o código-golfe, pelo que a resposta mais curta em bytes vence.
- As brechas padrão não são permitidas.
Implementação de exemplo
Eu preparei um exemplo de implementação em JavaScript. Não é competitivo nem jogado de golfe.
// 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 Para não aumentar excessivamente a complexidade, você não precisa converter a hora local em UTC. Se você usa o UTC, adicione uma nota à sua resposta.
2 Para mais detalhes, consulte " Distância Terra-Sol em um determinado dia do ano ", em Física
Math.cos
usa radianos. E como essa fórmula parece muito aproximada, você terá que ser claro sobre como as respostas devem ser verificadas.