Notre étoile la plus proche, le soleil, est très agitée. Les moments où il se lève et se fixent dépendent de l'endroit où vous vous trouvez et de la saison d'hiver.
Nous aimerions pouvoir déduire si le soleil brille à l'extérieur sans avoir à quitter le confort de nos sous-sols - c'est pourquoi nous avons besoin d'une carte du soleil actualisée (ou carte de la lumière du jour). C'est vous qui écrivez un programme qui génère tout ça!
Règles: Votre programme devrait produire une image (dans un format connu) ou une représentation artistique ASCII de notre planète, montrant (approximativement) les parties actuellement éclairées par le soleil. Votre programme doit être original et autonome : vous n'êtes pas autorisé à copier, utiliser, inclure ou appeler un code, à l'exception des bibliothèques standard de votre langage de programmation.
Si vous ne savez toujours pas de quoi je parle, voici un exemple de Wikipedia:
C'est un concours de popularité . Vous devez indiquer dans votre réponse lequel des éléments suivants vous essayez d’atteindre (plusieurs choix possibles):
Exactitude. Notez que les règles disent "approximation de" - plus votre approximation est bonne, plus le nombre de points de cette catégorie est élevé. Vous pouvez vérifier votre mise en œuvre par rapport à celles de Wolfram Alpha , Time and Date ou die.net .
Fonctionnalité. Par exemple, qu'en est-il de l'interactivité? Marquer des emplacements spécifiques? Cartographier d'autres planètes?
Esthétique. Dessiner des continents? Points bonus. Continents texturés? Points bonus. Sur une terre en 3D? Avec des nuages? Étoiles? Étoiles correctes ? Points de bonus massifs. Etc.
Utiliser une technologie peu commune, ancienne ou tout simplement fausse. Bien sûr, vous pouvez créer cela dans Mathematica, mais avez-vous envisagé de l'utiliser
m4
? SQL? Forth? Assemblage x86?Amusement. Vous voulez utiliser une carte de projection Dymaxion ? Aller de l'avant!
Petit code. C'est le Code Golf SE, après tout.
S'amuser!
la source
m4
n'importe quel jour de la semaine pour cette tâche ...Réponses:
Haskell - code de basse qualité
J'étais extrêmement fatigué quand j'ai écrit ceci.
J'aurais peut-être été trop loin avec l'idée de projections, de toute façon, voici la projection utilisée par le programme. Fondamentalement, comme projeter de la terre sur un cube puis le déplier. D'ailleurs, dans cette projection, l'ombre est faite de lignes droites.
Le programme utilise la date et l'heure actuelles et génère un fichier PPM sur stdout.
C'est
where
exact - code triangulaire ,case
s imbriqué , utilisation d'E / S non valide.la source
fromIntegral (fromEnum $ utctDayTime c)
est plus nette que(realToFrac $ utctDayTime c)
. (J'ai seulement appris cela en écrivant ma réponse)Haskell, dans la catégorie 'parce que c'est là'
J'étais curieux alors j'ai écrit un. Les formules sont raisonnablement précises [1], mais ensuite, je vais utiliser de l’art ascii au lieu d’une carte Plate Carrée appropriée, car elle était plus jolie (la façon dont je convertis les pixels en lat / long ne fonctionne correctement que pour Plate Carrée).
Exemple de sortie d'une période de l'année plus intéressante (nous sommes près de l'équinoxe, les taches rectangulaires de Wander Nauta sont donc assez précises :)) - ceci est pour le 16 janvier à 13:55:51 UTC 2014:
[1] ils sont identiques à ceux que vous trouverez ailleurs, à l'exception du travail supplémentaire nécessaire pour conserver les degrés entre 0 et 360, les heures entre 0 et 24 ans et les radians entre 0 et 2 dpi. Je pense que ce sont des retards de l'époque où nous utilisions des règles de diapositives; Les fonctions trig fonctionnent parfaitement en dehors de ces plages ...
la source
.
Bash, 882 caractères
Ceci est ma deuxième entrée, cette fois dans les catégories Esthétique , Technologie étrange , Fun et Code court . Cela s'inspire de l'entrée de Ram Narasimhan et du commentaire de Peter Taylor.
Le script génère d’abord une texture du monde basse résolution, regroupée sous forme de données codées en base64. Il génère ensuite 24 scènes PovRay contenant une sphère avec cette texture, chacune tournée pour "faire face au soleil". Enfin, les images sont combinées dans une animation GIF à l'aide d'ImageMagick. Cela signifie que PovRay et ImageMagick doivent être installés pour que le script fonctionne. N'hésitez pas à ignorer cette entrée si vous pensez que cela devrait la disqualifier.
Comme l'entrée de Ram et ma première entrée, cela ne tient pas compte du changement saisonnier, ce qui signifie que ce n'est pas très précis. Cependant, il est plus court, plus joli et plus précis que ma première entrée - et contrairement à l'entrée de Ram, les données de la carte et le code permettant de générer l'animation GIF sont inclus.
En bonus , voici un GIF qui utilise l'image Blue Marble de la NASA au lieu de la texture 1 bit, qui permet de gagner de la place, c'est-à-dire à quoi ressemblerait le résultat sans restriction de taille: http://i.imgur.com/AnahEIu.gif
*: 882 caractères, sans compter les espaces décoratifs, 1872 caractères au total.
la source
J'ai décidé de lancer le concours avec une entrée personnelle, dans la catégorie des codes courts . Il compte 923 caractères, sans compter les nouvelles lignes.
C: 923 caractères
Voici le code:
Voilà comment cela fonctionne:
Voici un exemple de sortie, converti en PNG ( version plus grande ):
*: Le monde entier sauf l'Antarctique, mais qui y habite quand même ...
la source
Haskell - c'est l'heure du marteau.
J'ai fait un autre. Adapté de ma version précédente, celui-ci utilise une projection de Hammer oblique pour montrer les deux pôles en même temps (en fait, vous voyez toute la Terre dans chaque image). Juste pour ajouter un peu de bizarrerie, au lieu d’utiliser une image bitmap directement, j’ai échantillonné la Terre le long d’une spirale pour obtenir une couverture à peu près égale; c'est ce qui me permet de déformer la terre et de la faire pivoter facilement. La projection de Hammer est également égale; mon idée était que coupler ces deux choses entraînerait moins de distorsion lorsque je comblerais les lacunes. J'affiche également un réticule sur la projection, en utilisant l' algorithme de Bresenham pour tracer les lignes. Le globe terrestre et la ligne de terminaison se déplacent au cours de la journée.
Modifié pour modifier l'image en une résolution plus élevée, mais (délibérément) bitmap sous-jacente plus grossière, afin que vous puissiez voir l'effet de la spirale. Cela utilise 5000 points (échantillonnés à partir de ~ 260000 ), ce qui équivaut à un bitmap 50x100, mais donne plus de résolution à l'équateur qu'aux pôles.
Pour utiliser le code, compilez avec ghc, exécutez-le avec un paramètre numérique facultatif qui correspond au décalage horaire; Les fichiers sont générés comme 'earth0.pgm', 'earth1.pgm'.
la source
C, en utilisant des images pnm
Réponse tardive, axée sur l' exactitude et l' esthétique . La sortie est un mélange de deux images d'entrée (day.pnm et night.pnm), y compris une bande de crépuscule. J'utilise des images basées sur le marbre bleu de la NASA ici.
Le code utilise mon propre img.h pour plus de clarté (imaginez simplement qu’il soit inclus textuellement dans le fichier .c pour une conformité stricte aux règles ...). Tout y est implémenté via des macros C. Les animations sont construites avec imagemagick converti à partir de plusieurs images - le programme lui-même ne produira que des images statiques. Le code est ci-dessous.
Maintenant: (13 août ~ 13 h 00 CEST)
Un jour: (1er janvier)
Un an: (12:00 UTC)
sun.c
img.h
la source
R: Utilisation de ggplot2 et de la projection cartographique
Inspiré par le message de @ mniip, j'ai décidé d'utiliser le paquet mapproj de R, qui permet d'orienter le globe en spécifiant l'emplacement du pôle Nord lors du calcul de la projection.
Sur la base de l’heure GMT actuelle, je calcule la longitude à l’endroit où il est actuellement midi et fais de ce point le centre de la carte. Nous examinons la Terre du "point de vue du Soleil", de sorte que tout ce qui est visible est en plein jour.
Une grande partie du code est simplement esthétique. La seule chose que je devais comprendre était de calculer la "longitude de midi", c'est-à-dire la longitude où il était midi compte tenu de l'heure GMT.
J'ai ensuite utilisé le package d'animation R pour générer 24 images et les ai cousues dans un fichier GIF.
la source
JavaScript - de Martin Kleppe ( http://aem1k.com/ )
Je tiens à souligner que ce n'est pas mon travail, mais celui de Martin Kleppe. Je pense juste que ça va si bien qu'il ne devrait pas en manquer ici:
Démo en ligne (ou collez-le simplement dans la console)
la source