Einführung
tl; dr
Bei dieser Herausforderung müssen Sie die Mondphase für ein bestimmtes Datum berechnen.
Diese Herausforderung wird durch die inspirierte Spiel psychosoziale audiovisuellen Experiment „ : Sword & Sworcery EP Superbrothers “. In S: S & S EP sind die Mondphasen für das Ergebnis des Abenteuers wichtig, da einige Ereignisse nur zu einem bestimmten Zeitpunkt auftreten.
Die Frage ist: Welche Mondphase ist zu einem bestimmten Zeitpunkt vorhanden? Jede Hauptphase - vom Neumond über das erste Quartal bis zum Vollmond bis zum dritten Quartal - dauert etwa 7,38 Tage. Der gesamte Mondzyklus beträgt ungefähr 29,52 Tage. Basierend auf diesen Werten existieren verschiedene Berechnungsmethoden. 1
Eingang
- Ein auf dem Gregorianischen Kalender basierendes Datum zwischen dem 1. Januar 1970 und dem 31. Dezember 2116.
- Sie können eine der folgenden Formaten wählen:
yyyy-mm-dd
,dd.mm.yyyy
,dd/mm/yyyy
,yyyymmdd
oderddmmyyyy
.
Ausgabe
Geben Sie den Index [0-7]
der Mondphase basierend auf diesem nullindizierten Array aus:
['New moon', 'Waxing crescent', 'First quarter', 'Waxing gibbous', 'Full moon', 'Waning gibbous', 'Third quarter', 'Waning crescent`]
Bedarf
- Sie können ein Programm oder eine Funktion schreiben. Wenn Sie sich für eine anonyme Funktion entscheiden, geben Sie bitte ein Beispiel für den Aufruf an.
- Die Eingabe wird von
STDIN
Befehlszeilenargumenten, als Funktionsparameter oder vom nächsten Äquivalent akzeptiert . - Dies ist Code-Golf, so dass die kürzeste Antwort in Bytes gewinnt.
- Eingebaute oder externe Bibliotheken, die die Mondphase berechnen, sind nicht zulässig. 2
- Standardlücken sind nicht zulässig.
Tests
Die Werte sind: date | index of the phase | illumination | name
Ein vollständiger Mondzyklus:
08.02.2016 | 0 | 0% | New moon
07.02.2016 | 7 | 2% | Waning crescent
07.02.2016 | 7 | 2% | Waning crescent
06.02.2016 | 7 | 6% | Waning crescent
05.02.2016 | 7 | 12% | Waning crescent
04.02.2016 | 7 | 19% | Waning crescent
03.02.2016 | 7 | 28% | Waning crescent
02.02.2016 | 7 | 37% | Waning crescent
01.02.2016 | 6 | 47% | Third quarter
31.01.2016 | 5 | 56% | Waning gibbous
30.01.2016 | 5 | 65% | Waning gibbous
29.01.2016 | 5 | 74% | Waning gibbous
28.01.2016 | 5 | 82% | Waning gibbous
27.01.2016 | 5 | 89% | Waning gibbous
26.01.2016 | 5 | 94% | Waning gibbous
25.01.2016 | 5 | 98% | Waning gibbous
24.01.2016 | 4 | 100% | Full moon
23.01.2016 | 3 | 100% | Waxing gibbous
22.01.2016 | 3 | 97% | Waxing gibbous
21.01.2016 | 3 | 93% | Waxing gibbous
20.01.2016 | 3 | 86% | Waxing gibbous
19.01.2016 | 3 | 77% | Waxing gibbous
18.01.2016 | 3 | 67% | Waxing gibbous
17.01.2016 | 3 | 56% | Waxing gibbous
16.01.2016 | 2 | 45% | First quarter
15.01.2016 | 1 | 33% | Waxing crescent
14.01.2016 | 1 | 23% | Waxing crescent
13.01.2016 | 1 | 14% | Waxing crescent
12.01.2016 | 1 | 7% | Waxing crescent
11.01.2016 | 1 | 2% | Waxing crescent
10.01.2016 | 0 | 0% | New moon
Zufällige Testfälle:
14.12.2016 | 4 | 100% | Full moon
16.10.1983 | 3 | 75% | Waxing gibbous
04.07.1976 | 2 | 47% | First quarter
28.11.1970 | 0 | 0% | New moon
Da die meisten Methoden nicht auf wissenschaftlichem Niveau genau sind und Sie für einige Tage auch auf verschiedenen Websites gemischte Ergebnisse erhalten, ist es akzeptabel, wenn Ihre Ergebnisse innerhalb eines Bereichs von ± 1 Tag liegen.
Bonus
Reduzieren Sie Ihre Byteanzahl und ziehen Sie ab :
- 15% - Gibt den tatsächlichen Namen der Phase aus, wie im Abschnitt Ausgabe aufgeführt, anstelle des Index.
- 25% - Drucken Sie die Daten des bevorstehenden Neu- und Vollmonds durch Leerzeichen oder Zeilenumbrüche bei leerer Eingabe.
1 Zum Beispiel: Berechnungsphase bei Wikipedia.
2 Entschuldigung Mathematica .
Antworten:
Python
23,255204180178 BytesDiese Antwort ist an mehreren Stellen um ein oder zwei Tage ungenau, auch für einige der Testfälle, obwohl mir gesagt wurde, dass eine gewisse Ungenauigkeit akzeptabel sei. In jedem Fall ist die Bewegung des Mondes niemals sehr genau und diese Funktion bleibt im Allgemeinen korrekt (oder variiert zumindest nicht zu weit).
Bearbeiten: Im Zuge der Korrektur und Genauigkeit meines Codes habe ich ihn erheblich reduziert.
Bearbeiten: Dieser Code ist jetzt ein einzeiliges Python 3-Programm. ( Dank an TimmyD für den Namen "magische Zahlen")
Ungolfed:
quelle