Nuestra estrella más cercana, el sol, es bastante inquieta. Los momentos en que aumenta y se establece dependen de dónde se encuentre y de si es invierno o no.
Nos gustaría poder deducir si el sol está brillando afuera sin tener que abandonar las comodidades de nuestros sótanos, por lo que necesitamos un mapa solar actualizado (también conocido como mapa de la luz del día). ¡Tú eres el que escribe un programa que genera exactamente eso!
Reglas: Su programa debe generar una imagen (en un formato conocido) o una representación de arte ASCII de nuestro planeta, que muestre (una aproximación de) qué partes están iluminadas actualmente por el sol. Su programa debe ser original y autónomo : no puede copiar, usar, incluir ni llamar ningún código, excepto las bibliotecas estándar de su lenguaje de programación.
Si todavía no tienes idea de lo que estoy hablando, aquí hay un ejemplo de Wikipedia:
Este es un concurso de popularidad . Debería anotar en su respuesta cuál de los siguientes está tratando de lograr (varias opciones posibles):
Exactitud. Tenga en cuenta que las reglas dicen 'una aproximación de': cuanto mejor sea su aproximación, más puntos en esta categoría. Puede verificar su implementación con Wolfram Alpha's , Time and Date's o die.net's .
Funcionalidad Por ejemplo, ¿qué pasa con la interactividad? ¿Marcar ubicaciones específicas? Mapeando otros planetas?
Estética. ¿Dibujando continentes? Puntos extra. Continentes con textura? Puntos extra. ¿En una tierra 3D? Con las nubes? ¿Estrellas? Corregir estrellas? Puntos de bonificación masivos. Y así.
Uso de tecnología poco común, antigua o simplemente errónea. Claro, podrías preparar esto en Mathematica, pero ¿has considerado usarlo
m4
? SQL? ¿Adelante? montaje x86?Divertido. ¿Quiere usar un mapa de proyección Dymaxion ? ¡Adelante!
Código corto. Este es el Code Golf SE, después de todo.
¡Que te diviertas!
fuente
m4
cualquier día de la semana para esta tarea ...Respuestas:
Haskell - código de baja calidad
Estaba extremadamente cansado cuando escribí esto.
De todos modos, podría haber ido demasiado lejos con la idea de las proyecciones, aquí está la proyección que usa el programa. Básicamente, como proyectar tierra sobre un cubo y luego desplegarlo. Además, en esta proyección, la sombra está hecha de líneas rectas.
El programa usa la fecha / hora actual y genera un archivo PPM en stdout.
Así es:
where
código triangular ,case
s anidado , uso de E / S no válido.fuente
fromIntegral (fromEnum $ utctDayTime c)
es más ordenada como(realToFrac $ utctDayTime c)
. (Solo aprendí esto mientras escribía mi respuesta)Haskell, en la categoría 'porque está ahí'
Tenía curiosidad, así que escribí uno. Las fórmulas son razonablemente precisas [1], pero luego uso un poco de arte ascii en lugar de un mapa adecuado de Plate Carrée, porque se veía mejor (la forma en que convierto píxeles a lat / long solo funciona correctamente para Plate Carrée)
Ejemplo de salida, de una época más interesante del año (estamos cerca del equinoccio, por lo que las gotas rectangulares de Wander Nauta son bastante precisas :)) - esto es para el 16 de enero 13:55:51 UTC 2014:
[1] son los mismos que encontrarás en otros lugares, excepto sin el trabajo adicional para mantener grados entre 0 y 360, horas entre 0 y 24 y radianes entre 0 y 2pi. Creo que esos son restos de los días que usamos las reglas de cálculo; las funciones trigonométricas funcionan bien fuera de esos rangos ...
fuente
.
Bash, 882 * caracteres
Esta es mi segunda entrada, esta vez en las categorías de Estética , Tecnología extraña , Diversión y Código corto . Está inspirado en la entrada de Ram Narasimhan y el comentario de Peter Taylor.
El script primero genera una textura de baja resolución del mundo, agrupada como datos codificados en base64. Luego genera 24 escenas PovRay que contienen una esfera con esa textura, cada una rotada para 'enfrentar al sol'. Finalmente, los cuadros se combinan en una animación GIF usando ImageMagick. Esto significa que tendrá que tener instalados PovRay e ImageMagick para que el script funcione; siéntase libre de ignorar esta entrada si cree que debería descalificarla.
Al igual que la entrada de Ram, y mi primera entrada, esto no tiene en cuenta el cambio estacional, lo que significa que no es muy preciso. Sin embargo, es más corto, más bonito y más preciso que mi primera entrada, y a diferencia de la entrada de Ram, se incluyen los datos del mapa y el código para generar la animación GIF.
Como beneficio adicional , aquí hay un GIF que usa la imagen de mármol azul de la NASA en lugar de la textura de 1 bit que ahorra espacio, es decir, cómo se vería el resultado sin ninguna restricción de tamaño: http://i.imgur.com/AnahEIu.gif
*: 882 caracteres sin contar espacios en blanco decorativos, 1872 caracteres en total.
fuente
Decidí comenzar el concurso con una entrada propia, en la categoría de código corto . Tiene 923 caracteres de largo, sin contar nuevas líneas.
C: 923 caracteres
Aquí está el código:
Así es como funciona:
Aquí hay un ejemplo de salida, convertido a PNG ( versión más grande ):
*: El mundo entero, excepto la Antártida, pero que vive allí de todos modos ...
fuente
Haskell: es la hora del martillo.
Yo hice otro. Adaptado de mi versión anterior, esta usa una proyección oblicua de Hammer para mostrar ambos polos al mismo tiempo (de hecho, estás viendo toda la tierra en cada cuadro). Solo por rareza añadida, en lugar de usar un mapa de bits directamente, muestreé la tierra a lo largo de una espiral para dar una cobertura de área aproximadamente igual; Esto es lo que me permite distorsionar la tierra y rotarla fácilmente. La proyección de Hammer es igual área también; mi idea era que emparejar estas dos cosas conduciría a una menor distorsión cuando complete los espacios en blanco. También muestro una retícula en la proyección, usando el algoritmo de Bresenham para dibujar las líneas. El globo y la línea de terminación se mueven a lo largo del día.
Editado para cambiar la imagen a una resolución más alta pero (deliberadamente) mapa de bits subyacente más grueso, para que pueda ver el efecto de la espiral. Utiliza 5000 puntos (muestreados desde ~ 260000 ), equivalentes a un mapa de bits de 50x100, pero dando más resolución al ecuador que a los polos.
Para usar el código, compile con ghc, ejecute con un parámetro numérico opcional que es el desplazamiento de la hora; los archivos se generan como 'earth0.pgm', 'earth1.pgm'.
fuente
C, usando imágenes pnm
Respuesta tardía, centrándose en la corrección y la estética . La salida es una mezcla de dos imágenes de entrada (day.pnm y night.pnm), incluida una franja de crepúsculo. Estoy usando imágenes basadas en mármol azul de la NASA aquí.
El código usa mi propio img.h para mayor claridad (solo imagínense que se incluye textualmente en el .c para el cumplimiento estricto de las reglas ...). Todo allí se implementa a través de macros C. Las animaciones están construidas con imagemagicks convertidos de múltiples cuadros: el programa en sí solo generará imágenes estáticas. El código está abajo.
Ahora: (13 de agosto, ~ 13: 00 CEST)
Un día: (1 de enero)
Un año: (12:00 UTC)
sun.c
img.h
fuente
R: Uso de ggplot2 y proyección de mapa
Inspirado por la publicación de @ mniip, decidí intentar usar el paquete mapproj de R, en el que podemos orientar el globo al especificar dónde debería estar el Polo Norte al calcular la proyección.
Basado en el tiempo GMT actual, calculo la longitud donde es actualmente el mediodía y hago que ese punto sea el centro del mapa. Estamos mirando a la Tierra desde el "punto de vista del Sol" para que todo lo que sea visible sea a la luz del día.
Gran parte del código es solo estética. La única parte que tuve que averiguar fue calcular la "Longitud del mediodía", que es el valor de longitud donde era mediodía dado cualquier hora GMT.
Luego usé el paquete de animación R para generar 24 imágenes y las cosí en un GIF.
fuente
JavaScript - por Martin Kleppe ( http://aem1k.com/ )
Quiero enfatizar que este no es mi trabajo, sino el trabajo de Martin Kleppe. Simplemente creo que encaja tan perfectamente que no debería faltar aquí:
Demostración en línea (o simplemente péguelo en la consola)
fuente