Unser nächster Stern, die Sonne, ist ziemlich zappelig. Die Zeiten, in denen es steigt und sinkt, hängen davon ab, wo Sie sich befinden und ob es Winter ist oder nicht.
Wir möchten ableiten können, ob die Sonne draußen scheint, ohne den Komfort unserer Keller verlassen zu müssen - daher benötigen wir eine aktuelle Sonnenkarte (auch Tageslichtkarte genannt). Sie sind derjenige, der ein Programm schreibt, das genau das erzeugt!
Regeln: Ihr Programm sollte ein Bild (in einem bekannten Format) oder eine ASCII-Grafikdarstellung unseres Planeten ausgeben, die angibt, welche Teile derzeit von der Sonne beleuchtet werden. Ihr Programm muss original und eigenständig sein : Sie dürfen keinen Code außer den Standardbibliotheken Ihrer Programmiersprache kopieren, verwenden, einschließen oder aufrufen.
Wenn Sie immer noch keine Ahnung haben, wovon ich spreche, hier ein Beispiel aus Wikipedia:
Dies ist ein Beliebtheitswettbewerb . Sie sollten in Ihrer Antwort angeben, welches der folgenden Ziele erreicht werden soll (Mehrfachauswahl möglich):
Richtigkeit. Beachten Sie, dass die Regeln "eine Annäherung an" sagen - je besser Ihre Annäherung, desto mehr Punkte in dieser Kategorie. Sie können Ihre Implementierung anhand von Wolfram Alpha's , Time and Date's oder die.net's überprüfen .
Funktionalität. Was ist zum Beispiel mit Interaktivität? Bestimmte Orte markieren? Andere Planeten kartieren?
Ästhetik. Kontinente zeichnen? Bonuspunkte. Texturierte Kontinente? Bonuspunkte. Auf einer 3D Erde? Mit Wolken? Sterne? Richtige Sterne? Massive Bonuspunkte. Und so weiter.
Mit ungewöhnlichen, alten oder einfach falschen Technologien. Sicher, Sie könnten dies in Mathematica verbessern, aber haben Sie darüber nachgedacht, dies zu verwenden
m4
? SQL? Weiter? x86-Assembly?Spaß. Möchten Sie eine Dymaxion-Projektionskarte verwenden ? Gehen Sie geradeaus!
Kurzcode. Immerhin ist das der Code Golf SE.
Habe Spaß!
quelle
m4
für diese Aufgabe an jedem Wochentag in Anspruch nehmen ...Antworten:
Haskell - Code mit niedriger Qualität
Ich war sehr müde, als ich das schrieb.
Ich wäre mit der Projektionsidee vielleicht zu weit gegangen. Hier ist die Projektion, die das Programm verwendet. Im Grunde wie Erde auf einen Würfel projizieren und ihn dann entfalten. Außerdem besteht der Schatten in dieser Projektion aus geraden Linien.
Das Programm verwendet das aktuelle Datum und die aktuelle Uhrzeit und gibt eine PPM-Datei auf stdout aus.
Das ist richtig - dreieckiger
where
Code, verschachteltecase
s, ungültige IO-Verwendung.quelle
fromIntegral (fromEnum $ utctDayTime c)
ist ordentlicher als(realToFrac $ utctDayTime c)
. (Das habe ich erst beim Schreiben meiner Antwort gelernt)Haskell, in der Kategorie "weil es da ist"
Ich war neugierig und schrieb eine. Die Formeln sind einigermaßen genau [1], aber dann benutze ich etwas ASCII-Grafik anstelle einer richtigen Plate Carrée-Karte, weil sie besser aussieht (die Art und Weise, wie ich Pixel in Lat / Long konvertiere, funktioniert nur bei Plate Carrée richtig).
Beispielausgabe aus einer interessanteren Jahreszeit (wir befinden uns in der Nähe des Äquinoktiums, daher sind die rechteckigen Blobs von Wander Nauta ziemlich genau :)) - dies ist für den 16. Januar, 13:55:51 UTC 2014:
[1] Sie sind die gleichen wie an anderen Orten, außer ohne zusätzlichen Aufwand, um die Gradzahlen zwischen 0 und 360, die Stunden zwischen 0 und 24 und den Bogenmaß zwischen 0 und 2 pi beizubehalten. Ich denke, das sind Überbleibsel aus der Zeit, als wir Rechenschieber verwendeten. Trigger-Funktionen funktionieren auch außerhalb dieser Bereiche einwandfrei ...
quelle
.
Bash, 882 * Zeichen
Dies ist mein zweiter Eintrag, diesmal in den Kategorien Aesthetics , Weird Tech , Fun und Short Code . Es ist inspiriert von Ram Narasimhans Beitrag und Peter Taylors Kommentar.
Das Skript generiert zunächst eine niedrig aufgelöste Textur der Welt, die als base64-codierte Daten gebündelt wird. Anschließend werden 24 PovRay-Szenen erzeugt, die eine Kugel mit dieser Textur enthalten, die jeweils gedreht werden, um der Sonne zugewandt zu sein. Schließlich werden die Frames mit ImageMagick zu einer GIF-Animation kombiniert. Das bedeutet, dass Sie sowohl PovRay als auch ImageMagick installiert haben müssen, damit das Skript funktioniert. Sie können diesen Eintrag ignorieren, wenn Sie der Meinung sind, dass er dadurch disqualifiziert wird.
Wie bei Rams Eintrag und meinem ersten Eintrag ist auch hier kein saisonaler Wechsel zu verzeichnen, was bedeutet, dass er nicht sehr genau ist. Es ist jedoch kürzer, hübscher und präziser als mein erster Eintrag - und im Gegensatz zu Rams Eintrag sind die Kartendaten und der Code zum Generieren der GIF-Animation enthalten.
Als Bonus gibt es hier ein GIF, das das Blue Marble-Bild der NASA anstelle der platzsparenden 1-Bit-Textur verwendet, dh wie das Ergebnis ohne Größenbeschränkung ausgesehen hätte: http://i.imgur.com/AnahEIu.gif
*: 882 Zeichen ohne dekorative Leerzeichen, insgesamt 1872 Zeichen.
quelle
Ich beschloss, den Wettbewerb mit einem Eintrag meines eigenen, in der Kick - off Kurzcode Kategorie. Es ist 923 Zeichen lang, ohne Zeilenumbrüche.
C: 923 Zeichen
Hier ist der Code:
So funktioniert das:
Hier ist eine Beispielausgabe, die in PNG ( größere Version ) konvertiert wurde :
*: Die ganze Welt außer der Antarktis, aber wer lebt dort schon?
quelle
Haskell - es ist Hammerzeit.
Ich habe noch einen gemacht. In Anlehnung an meine Vorgängerversion wird hier eine schräge Hammerprojektion verwendet , um beide Pole gleichzeitig anzuzeigen (tatsächlich sehen Sie die ganze Erde in jedem Frame). Nur aus Gründen der Verrücktheit habe ich die Erde entlang einer Spirale abgetastet , anstatt direkt eine Bitmap zu verwenden, um eine annähernd gleiche Flächenabdeckung zu erzielen. Dadurch kann ich die Erde verzerren und leicht drehen. Hammers Projektion ist auch gleich groß; Meine Idee war, dass die Kombination dieser beiden Dinge zu weniger Verzerrungen führen würde, wenn ich die Lücken ausfülle. Ich zeige auch ein Raster auf der Projektion an und benutze Bresenhams Algorithmus, um die Linien zu zeichnen. Der Globus und die Abschlusslinie bewegen sich im Laufe des Tages.
Bearbeitet, um das Bild in eine höhere Auflösung zu ändern, aber (absichtlich) eine gröbere zugrunde liegende Bitmap, sodass Sie den Effekt der Spirale sehen können. Dies verwendet 5000 Punkte (ab ca. 260000 abgetastet ), was einer 50x100-Bitmap entspricht, aber dem Äquator eine höhere Auflösung als den Polen verleiht.
Um den Code zu verwenden, kompilieren Sie ihn mit ghc und führen Sie ihn mit einem optionalen numerischen Parameter aus, der den Stundenversatz angibt. Dateien werden wie 'earth0.pgm', 'earth1.pgm' erzeugt.
quelle
C, mit PNM-Bildern
Späte Antwort mit Fokus auf Korrektheit und Ästhetik . Die Ausgabe ist eine Mischung aus zwei Eingabebildern (Tag.pnm und Nacht.pnm), einschließlich eines Dämmerungsstreifens. Ich verwende hier Bilder, die auf blauem Marmor der NASAs basieren.
Der Code verwendet aus Gründen der Übersichtlichkeit meine eigene img.h. Alles, was sich dort befindet, wird über C-Makros implementiert. Die Animationen werden mit imagemagicks erstellt, die aus mehreren Frames konvertiert wurden. Das Programm selbst gibt nur statische Bilder aus. Code ist unten.
Jetzt: (13. August - 13:00 Uhr MESZ)
Ein Tag: (1. Januar)
Ein Jahr: (12:00 UTC)
sun.c
img.h
quelle
R: Mit ggplot2 und Kartenprojektion
Inspiriert von @ mniips Beitrag, habe ich mich für das mapproj-Paket von R entschieden, in dem wir den Globus ausrichten können, indem wir angeben, wo sich der Nordpol bei der Berechnung der Projektion befinden soll.
Basierend auf der aktuellen GMT-Zeit berechne ich den Längengrad, an dem es gerade Mittag ist, und mache diesen Punkt zum Mittelpunkt der Karte. Wir betrachten die Erde aus der Sicht der Sonne, also ist alles, was sichtbar ist, im Tageslicht.
Ein Großteil des Codes ist nur Ästhetik. Der einzige Teil, den ich herausfinden musste, war die Berechnung der "Mittagslänge", das ist der Längengradwert, bei dem es zu jeder GMT-Zeit mittags war.
Ich habe dann das R-Animationspaket verwendet , um 24 Bilder zu generieren und sie zu einem GIF zusammenzufügen.
quelle
JavaScript - von Martin Kleppe ( http://aem1k.com/ )
Ich möchte betonen, dass dies nicht meine Arbeit ist, sondern die Arbeit von Martin Kleppe. Ich finde es passt einfach so perfekt, dass es hier nicht fehlen sollte:
Online Demo (oder einfach in die Konsole einfügen)
quelle