Nossa estrela mais próxima, o sol, é bastante inquieta. Os tempos em que aumenta e se põe dependem de onde você está e se é inverno ou não.
Gostaríamos de deduzir se o sol está brilhando do lado de fora sem precisar sair do conforto de nossos porões - e é por isso que precisamos de um mapa solar atualizado (também conhecido como mapa da luz do dia). Você é quem escreve um programa que gera exatamente isso!
Regras: Seu programa deve produzir uma imagem (em um formato conhecido) ou uma representação artística ASCII do nosso planeta, mostrando (uma aproximação) quais partes estão atualmente iluminadas pelo sol. Seu programa deve ser original e independente : você não tem permissão para copiar, usar, incluir ou chamar qualquer código, exceto as bibliotecas padrão da sua linguagem de programação.
Se você ainda não tem idéia do que estou falando, aqui está um exemplo da Wikipedia:
Este é um concurso de popularidade . Você deve anotar em sua resposta qual das seguintes opções você está tentando alcançar (várias opções possíveis):
Correção. Observe que as regras dizem 'uma aproximação de' - quanto melhor a sua aproximação, mais pontos nesta categoria. Você pode verificar sua implementação em relação a Wolfram Alpha , Time and Date ou die.net .
Funcionalidade. Por exemplo, e quanto à interatividade? Marcando locais específicos? Mapeando outros planetas?
Estética. Desenhando continentes? Pontos bônus. Continentes texturizados? Pontos bônus. Em uma terra 3D? Com nuvens? Estrelas? Estrelas corretas ? Pontos de bônus maciços. E assim por diante.
Usando tecnologia incomum, antiga ou simplesmente incorreta. Claro, você pode preparar isso no Mathematica, mas já pensou em usar
m4
? SQL? Adiante? montagem x86?Diversão. Deseja usar um mapa de projeção Dymaxion ? Continue!
Código curto. Este é o Code Golf SE, afinal.
Diverta-se!
fonte
m4
qualquer dia da semana para esta tarefa ...Respostas:
Haskell - código de baixa qualidade
Eu estava extremamente cansado quando escrevi isso.
Eu poderia ter ido longe demais com a idéia de projeções, de qualquer forma, aqui está a projeção que o programa usa. Basicamente, como projetar terra em um cubo e depois desdobrar. Além disso, nesta projeção, a sombra é feita de linhas retas.
O programa usa data / hora atual e gera um arquivo PPM no stdout.
Isso mesmo -
where
código triangular ,case
s aninhados , uso de IO inválido.fonte
fromIntegral (fromEnum $ utctDayTime c)
é melhor(realToFrac $ utctDayTime c)
. (Eu só aprendi isso ao escrever a minha resposta)Haskell, na categoria 'porque está lá'
Eu estava curioso, então escrevi um. As fórmulas são razoavelmente precisas [1], mas depois uso uma arte ascii em vez de um mapa Plate Carrée adequado, porque parecia mais agradável (a maneira como converto pixels em lat / long só funciona corretamente para Plate Carrée)
Exemplo de saída, de uma época do ano mais interessante (estamos perto do equinócio, para que os blobs retangulares de Wander Nauta sejam bastante precisos :)) - isto é para 16 de janeiro 13:55:51 UTC 2014:
[1] são os mesmos que você encontrará em outro lugar, exceto sem o trabalho extra de manter graus entre 0 e 360, horas entre 0 e 24 e radianos entre 0 e 2pi. Eu acho que são remanescentes dos dias em que usamos regras de slide; funções trigonométricas funcionam muito bem fora desses intervalos ...
fonte
.
Bash, 882 * caracteres
Esta é minha segunda entrada, desta vez nas categorias Estética , Tecnologia estranha , Diversão e Código curto . É inspirado na entrada de Ram Narasimhan e no comentário de Peter Taylor.
O script primeiro gera uma textura de baixa resolução do mundo, agrupada como dados codificados em base64. Em seguida, gera 24 cenas de PovRay contendo uma esfera com essa textura, cada uma girada para 'enfrentar o sol'. Finalmente, os quadros são combinados em uma animação GIF usando o ImageMagick. Isso significa que você precisará ter o PovRay e o ImageMagick instalados para que o script funcione - fique à vontade para ignorar esta entrada se achar que deve desqualificá-la.
Como a entrada de Ram, e minha primeira entrada, isso não leva em consideração as mudanças sazonais, o que significa que não é muito preciso. É, no entanto, mais curto, mais bonito e mais preciso do que minha primeira entrada - e, diferentemente da entrada de Ram, os dados do mapa e o código para gerar a animação GIF estão incluídos.
Como bônus , aqui está um GIF que usa a imagem Blue Marble da NASA em vez da textura de 1 bit que economiza espaço, ou seja, como seria o resultado sem nenhuma restrição de tamanho: http://i.imgur.com/AnahEIu.gif
*: 882 caracteres sem contar espaço em branco decorativo, 1872 caracteres no total.
fonte
Decidi iniciar o concurso com uma entrada minha, na categoria de código curto . Tem 923 caracteres, sem contar novas linhas.
C: 923 caracteres
Aqui está o código:
Veja como funciona:
Aqui está um exemplo de saída, convertido em PNG ( versão maior ):
*: O mundo inteiro, exceto a Antártica, mas quem mora lá de qualquer maneira ...
fonte
Haskell - é hora do Martelo.
Eu fiz outro. Adaptado da minha versão anterior, este usa uma projeção oblíqua do Hammer para mostrar os dois pólos ao mesmo tempo (na verdade, você está vendo a Terra inteira em cada quadro). Apenas para aumentar a estranheza, em vez de usar um bitmap diretamente, eu amostrava a Terra ao longo de uma espiral para fornecer uma cobertura de área aproximadamente igual; é isso que me permite distorcer a terra e girá-la facilmente. A projeção de Hammer também é uma área igual; minha idéia era que emparelhar essas duas coisas levaria a menos distorção quando eu preenchesse as lacunas. Também mostro uma gratícula na projeção, usando o algoritmo de Bresenham para desenhar as linhas. As linhas globo e terminador se movem ao longo do dia.
Editado para alterar a imagem para uma resolução mais alta, mas bitmap subjacente (deliberadamente) mais grosseiro, para que você possa ver o efeito da espiral. Isso usa 5000 pontos (amostrados de ~ 260000 ), equivalente a um bitmap de 50x100, mas dando mais resolução ao equador do que aos pólos.
Para usar o código, compile com ghc, execute com um parâmetro numérico opcional que é o deslocamento da hora; arquivos são gerados como 'earth0.pgm', 'earth1.pgm'.
fonte
C, usando imagens pnm
Resposta tardia, com foco na correção e estética . A saída é uma mistura de duas imagens de entrada (day.pnm e night.pnm), incluindo uma faixa de crepúsculo. Estou usando imagens baseadas em mármore azul da NASAs aqui.
O código usa meu próprio img.h para maior clareza (imagine-o sendo incluído literalmente no .c para conformidade estrita à regra ...). Tudo lá é implementado via macros C. As animações são construídas com imagens convertidas a partir de vários quadros - o próprio programa gera apenas imagens estáticas. O código está abaixo.
Agora: (13 de agosto, ~ 13: 00 CEST)
Um dia: (1º de janeiro)
Um ano: (12:00 UTC)
sun.c
img.h
fonte
R: Usando ggplot2 e projeção de mapa
Inspirado no post de @ mniip, decidi tentar usar o pacote mapproj de R, no qual podemos orientar o globo especificando onde o Polo Norte deveria estar ao calcular a projeção.
Com base no horário GMT atual, calculo a longitude onde é meio-dia e faço esse ponto no centro do mapa. Estamos olhando a Terra do "ponto de vista do Sol", para que tudo o que é visível esteja à luz do dia.
Grande parte do código é apenas estética. A única parte que eu tive que descobrir foi calcular o "longitude do meio-dia", que é o valor da longitude em que era meio-dia, dado o tempo GMT.
Eu então usei o pacote de animação R para gerar 24 imagens e as costurei em um GIF.
fonte
JavaScript - por Martin Kleppe ( http://aem1k.com/ )
Quero enfatizar que este não é o meu trabalho, mas o trabalho de Martin Kleppe. Eu apenas acho que se encaixa tão perfeitamente que não deve faltar aqui:
Demo Online (ou apenas cole no console)
fonte