Nasza najbliższa gwiazda, słońce, jest dość niespokojna. Czasy, w których wznosi się i zachodzi, zależą od tego, gdzie jesteś i od tego, czy jest zima, czy nie.
Chcielibyśmy móc wywnioskować, czy słońce świeci na zewnątrz, bez konieczności opuszczania komfortu naszych piwnic - dlatego potrzebujemy aktualnej mapy słonecznej (inaczej mapy światła dziennego). To ty piszesz program, który właśnie to generuje!
Reguły: Twój program powinien wypisać obraz (w znanym formacie) lub artystyczną reprezentację naszej planety ASCII, pokazując (przybliżenie), które części są aktualnie oświetlone przez słońce. Twój program musi być oryginalny i samodzielny : nie możesz kopiować, używać, włączać ani wywoływać żadnego kodu oprócz standardowych bibliotek języka programowania.
Jeśli nadal nie masz pojęcia, o czym mówię, oto przykład z Wikipedii:
To konkurs popularności . W swojej odpowiedzi powinieneś zanotować, które z poniższych działań starasz się osiągnąć (możliwych jest wiele możliwości wyboru):
Poprawność Pamiętaj, że zasady mówią „przybliżenie” - im lepsze zbliżenie, tym więcej punktów w tej kategorii. Możesz sprawdzić swoją implementację pod kątem Wolfram Alpha , Time i Date lub die.net's .
Funkcjonalność Na przykład, co z interaktywnością? Oznaczasz określone lokalizacje? Mapowanie innych planet?
Estetyka. Rysujesz kontynenty? Punkty bonusowe. Teksturowane kontynenty? Punkty bonusowe. Na ziemi 3D? Z chmurami? Gwiazdy? Prawidłowe gwiazdy? Ogromne punkty bonusowe. I tak dalej.
Używanie nietypowej, starej lub po prostu złej technologii. Jasne, możesz to wymyślić w Mathematica, ale czy zastanawiałeś się nad użyciem
m4
? SQL? Naprzód? montaż x86?Zabawa. Chcesz skorzystać z mapy projekcyjnej Dymaxion ? Śmiało!
Krótki kod. W końcu jest to Code Golf SE.
Baw się dobrze!
źródło
m4
dowolnym dniu tygodnia dla tego zadania ...Odpowiedzi:
Haskell - kod niskiej jakości
Byłem bardzo zmęczony, kiedy to napisałem.
Zresztą, mogłem posunąć się za daleko z pomysłem dotyczącym projekcji, oto projekcja używana przez program. Zasadniczo jak rzutowanie ziemi na sześcian, a następnie rozkładanie. Poza tym w tej projekcji cień składa się z prostych linii.
Program używa bieżącej daty / godziny i wyświetla plik PPM na standardowym wyjściu.
Zgadza się - trójkątny
where
kod, zagnieżdżonecase
s, nieprawidłowe użycie IO.źródło
fromIntegral (fromEnum $ utctDayTime c)
jest bardziej trafna(realToFrac $ utctDayTime c)
. (Nauczyłem się tego tylko pisząc odpowiedź)Haskell, w kategorii „ponieważ tam jest”
Byłem ciekawy, więc napisałem jeden. Formuły są dość dokładne [1], ale potem idę i używam sztuki ascii zamiast właściwej mapy Plate Carrée, ponieważ wyglądała ładniej (sposób, w jaki przekształcam piksele w długość / długość działa tylko poprawnie dla Plate Carrée)
Przykładowe dane wyjściowe z ciekawszej pory roku (jesteśmy w pobliżu równonocy, więc prostokątne plamy Wandera Nauty są dość dokładne :)) - to jest na 16 stycznia 13:55:51 UTC 2014:
[1] są takie same, jak można znaleźć gdzie indziej, z wyjątkiem bez dodatkowej pracy, aby utrzymać stopnie między 0 a 360, godziny między 0 a 24 i radianami między 0 a 2pi. Myślę, że są to pozostałości po dniach, w których stosowaliśmy reguły slajdów; funkcje trig działają dobrze poza tymi zakresami ...
źródło
.
Bash, 882 * znaków
To mój drugi wpis, tym razem w kategoriach Estetyka , Dziwna technika , Zabawa i Krótki kod . Inspirowany jest wpisem Ram Narasimhan i komentarzem Petera Taylora.
Skrypt najpierw generuje teksturę świata w niskiej rozdzielczości, spakowaną jako dane zakodowane w standardzie base64. Następnie generuje 24 sceny PovRay zawierające kulę o tej teksturze, każda obrócona „twarzą do słońca”. Na koniec ramki są łączone w animację GIF za pomocą ImageMagick. Oznacza to, że będziesz musiał zainstalować zarówno PovRay, jak i ImageMagick, aby skrypt działał - możesz zignorować ten wpis, jeśli uważasz, że powinien go zdyskwalifikować.
Podobnie jak wpis Ram i mój pierwszy wpis, nie uwzględnia to zmian sezonowych, co oznacza, że nie jest bardzo precyzyjny. Jest jednak krótszy, ładniejszy i bardziej precyzyjny niż mój pierwszy wpis - i w przeciwieństwie do wpisu Ram, zawarte są dane mapy i kod do generowania animacji GIF.
Jako bonus , oto GIF, który używa obrazu Blue Marble NASA zamiast oszczędzającej miejsce 1-bitowej tekstury, tj. Jak wyglądałby wynik bez żadnych ograniczeń wielkości: http://i.imgur.com/AnahEIu.gif
*: 882 znaki nie liczą białych znaków dekoracyjnych, w sumie 1872 znaki.
źródło
Zdecydowałem się rozpocząć konkurs od własnego wpisu w kategorii krótkiego kodu . Ma 923 znaków, nie licząc nowych linii.
C: 923 znaków
Oto kod:
Oto jak to działa:
Oto przykładowe dane wyjściowe przekonwertowane na format PNG ( większa wersja ):
*: Cały świat oprócz Antarktydy, ale i tak tam mieszka…
źródło
Haskell - czas na Młot.
Zrobiłem inny. Zaadaptowana z mojej poprzedniej wersji, ta wykorzystuje ukośną projekcję Młota, aby pokazać oba bieguny jednocześnie (w rzeczywistości widzisz całą ziemię w każdej klatce). Tylko dla dodatkowej dziwności, zamiast bezpośrednio korzystać z mapy bitowej, próbowałem ziemię wzdłuż spirali, aby uzyskać w przybliżeniu równe pokrycie powierzchni; to pozwala mi zniekształcać Ziemię i łatwo ją obracać. Rzut młota jest również równy; mój pomysł polegał na tym, że połączenie tych dwóch rzeczy doprowadziłoby do mniejszych zniekształceń, gdy uzupełnię luki. Wyświetlam też siatkę na projekcji, używając algorytmu Bresenhama do narysowania linii. Kula ziemska i linia terminatora poruszają się w ciągu dnia.
Edytowano, aby zmienić obraz na wyższą rozdzielczość, ale (celowo) grubszą mapę bitową, dzięki czemu można zobaczyć efekt spirali. Wykorzystuje 5000 punktów (próbkowanych z ~ 260000 ), co odpowiada bitmapie 50 x 100, ale daje większą rozdzielczość równikowi niż biegunom.
Aby użyć kodu, skompiluj z ghc, uruchom z opcjonalnym parametrem numerycznym, który jest przesunięciem godziny; pliki są generowane jak „ziemia0.pgm”, „ziemia1.pgm”.
źródło
C, używając obrazów PNM
Późna odpowiedź, koncentrująca się na poprawności i estetyce . Dane wyjściowe to połączenie dwóch obrazów wejściowych (day.pnm i night.pnm), w tym pas zmierzchu. Używam tutaj obrazów opartych na niebieskim marmurze NASA.
Kod używa mojego img.h dla przejrzystości (wyobraź sobie, że jest dołączony dosłownie w .c dla ścisłej zgodności z regułami ...). Wszystko tam jest zaimplementowane za pomocą makr C. Animacje są zbudowane z obrazów konwertujących obrazy z wielu ramek - sam program generuje tylko obrazy statyczne. Kod jest poniżej.
Teraz: (13 sierpnia, ~ 13: 00 CEST)
Pewnego dnia: (1 stycznia)
Jeden rok: (12:00 UTC)
sun.c
ryc
źródło
R: Korzystanie z ggplot2 i projekcji mapy
Zainspirowany postem @ mniip postanowiłem spróbować użyć pakietu mapproj R, w którym możemy zorientować glob, określając, gdzie powinien być biegun północny podczas obliczania projekcji.
Na podstawie aktualnego czasu GMT obliczam długość geograficzną, w której znajduje się obecnie południe, i wyznaczam ten punkt na środku mapy. Patrzymy na Ziemię z „punktu widzenia Słońca”, więc wszystko, co jest widoczne, znajduje się w świetle dziennym.
Duża część kodu to tylko estetyka. Jedyną częścią, którą musiałem wymyślić, było obliczenie „długości geograficznej południa”, czyli wartości długości geograficznej, w której było południe w danym czasie GMT.
Następnie użyłem pakietu animacji R, aby wygenerować 24 obrazy i połączyłem je w jeden plik GIF.
źródło
JavaScript - autor Martin Kleppe ( http://aem1k.com/ )
Chcę podkreślić, że to nie moja praca, ale praca Martina Kleppe. Po prostu myślę, że pasuje tak idealnie, że nie powinno go tu brakować:
Demo online (lub po prostu wklej je do konsoli)
źródło