Angesichts des bevorstehenden chinesischen Neujahrs ist es hier eine Herausforderung, den chinesischen Tierkreis, das chinesische Element und Taijitu für ein bestimmtes Datum zu berechnen.
Die Eingabe sollte ein Datum sein:
1/31/2014
Das hier verwendete Datum ist der US-Stil mm/dd/yyyy
, kann aber auch der ISO-8601-Stil sein. Daher ist yyyy-mm-dd
der Stil der Datumseingabe nicht streng.
Die Ausgabe sollte das Tierzeichen im chinesischen Tierkreis sein, einschließlich des Elements, das dem Datum entspricht, und seines Taijitu- Gegenstücks:
Horse - Wood - Yang
Eine Tabelle, die die Beziehung zwischen Tierkreiselement und Taijitu zeigt, ist hier zu sehen: Chinesischer Tierkreis - Jahre
Das Ausgabeformat ist nicht streng, sollte jedoch Tier-, Element- und Taijitu-Komponenten enthalten und in gewisser Weise abgegrenzt sein.
Beispiele für eine gültige Ausgabe für das oben genannte Datum können sein:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Ihr Programm sollte eine gültige Ausgabe für einen Bereich von mindestens 100 Jahren einschließlich des heutigen Datums zurückgeben. Dies bedeutet, dass mindestens zwei 60-jährige ( sexagenäre ) Zyklen berücksichtigt werden müssen .
Antworten:
Mathematica 63
Okay, das wird vielleicht alt, aber es funktioniert (Datumseingabe ist in vielen Fällen nicht eindeutig):
Beispiel:
quelle
C # -
357337339 BytesFormatiert:
quelle
string.Format
.Python 2: 360 *
387586594- ZeichenWeiter reduziert
Der obige Code funktioniert für das folgende Intervall: 5. Februar 1924 - 31. Dezember 2043
Beispiel: Nach dem Einfügen des obigen Codes in den Python-Interpreter-Cursor
und drücken Sie dann Enter, geben Sie ein Datum wie dieses ein
und dann Entererneut drücken , wird ausgegeben
* Reduzierte weitere 27 Bytes mit Brians Hilfe, siehe Kommentare.
quelle
1math6
und2math6
. Sogar die vorhergehenden 5 und die folgenden 3 werden mit unterschiedlichen Zeichen dazwischen gespiegelt. Das ist 3spooky5me.Ruby, 340
Dies gilt für Daten zwischen dem 5. Februar 1924 und dem 29. Januar 2044.
quelle
GolfScript (212 Zeichen)
Hierbei werden nicht druckbare Zeichen verwendet. Hier ist die Ausgabe von xxd:
Ein äquivalentes Programm, das String-Escapezeichen verwendet und daher etwas länger ist, ist:
Der interessante Teil ist die Berechnung des Datums, ob es vor oder nach dem chinesischen Neujahr ist, das in dieses gregorianische Jahr fällt. Ich ließ mich von dem Osterberechnungsalgorithmus inspirieren, den ich bei einer früheren Frage verwendet habe, und suchte nach einer relativ einfachen Berechnung des Neujahrsdatums. Am Ende habe ich eine einfache Formel verwendet, die mich den größten Teil des Weges dorthin bringt, sowie eine Nachschlagetabelle für den Fehlerbegriff.
Die einfache Berechnung ist
day_of_year = 21 + (19 * year % 30)
. Der Fehlerterm reicht von0
bis8
über den interessierenden Bereich (1924 bis 2044) und ändert sich nie von Jahr zu Jahr um mehr als eins. Daher wird die Nachschlagetabelle in einem ausgeglichenen ternären Bereich codiert und der Fehler wird durch Summieren der Fehlerterme von a berechnet Präfix der Tabelle.quelle
C #,
630611604572570 Bytes, 120 Jahre(Fügen Sie ~ 2⅔ Bytes pro zusätzlichem Jahr hinzu, wenn Sie den Offset kennen.)
Dies ist gut für Menschen, die vom 31. Januar 1900 bis zum 24. Januar 2020 geboren wurden und wahrscheinlich außerhalb dieses Bereichs abstürzen werden. Gibt es Bonuspunkte für die Anzahl der abgedeckten Jahre?
Oder komprimiert (mit zusätzlichen Zeilenumbrüchen):
Einer der Tricks war, den Ursprung der Offset-Tabelle am 28. Januar zu haben. Dies erwies sich als die niedrigste Zeichenanzahl.
Wenn zufällig darauf bestanden wird, dass die Eingabe eine Zeichenfolge ist, fügen Sie 22 Zeichen hinzu, um die Methodensignatur in Folgendes zu ändern:
und fügen Sie die Zeile hinzu:
EDITS:
string.Split()
Inspiration aus Eduard Florinescus Antwort .quelle
" - "+new[]{"Yang","Yin"}[x%2]
zu" - Y"+(x%2<1?"ang":"in")
:)Ziemlich einfach mit PHP unter Verwendung der Switch-Anweisung .
Die Berechnung ist so weit wie Sie wollen ...
quelle