Biorąc pod uwagę, że nadchodzi Chiński Nowy Rok, oto wyzwanie, aby obliczyć chińskiego zodiaku, żywioł i Taijitu na określoną datę.
Dane wejściowe powinny być datą:
1/31/2014
Data użyta tutaj jest stylem amerykańskim mm/dd/yyyy
, ale alternatywnie może być stylem ISO-8601: yyyy-mm-dd
więc styl wprowadzania daty nie jest ścisły.
Wyjściem powinien być znak zwierzęcy w chińskim zodiaku zawierający element odpowiadający dacie i jego odpowiednik w Taijitu :
Horse - Wood - Yang
Tabelę pokazującą związek Zodiak - element - Taijitu można zobaczyć tutaj: Zodiak Chiński - Lata
Format wyjściowy nie jest ścisły, ale powinien zawierać zwierzę, element i komponent Taijitu i powinien być określony w pewien sposób.
Przykłady prawidłowych danych wyjściowych dla powyższej daty mogą obejmować:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Twój program powinien zwracać prawidłowe dane wyjściowe przez okres co najmniej 100 lat, w tym dzisiejszą datę. Oznacza to, że konieczne będzie uwzględnienie co najmniej dwóch 60-letnich ( płciowych ) cykli.
Odpowiedzi:
Mathematica 63
OK, może się to starzeć, ale działa (w wielu przypadkach wprowadzanie daty jest niejednoznaczne):
Przykład:
źródło
C # -
357337339 bajtówSformatowany:
źródło
string.Format
.Python 2: 360 *
387586594- ZnakiZredukowane dalej
Powyższy kod działa w następującym przedziale: 5 lutego 1924 r. - 31 grudnia 2043 r
Przykład: po wklejeniu powyższego kodu do kursora interpretera python
a następnie naciśnij Enter, wprowadź taką datę
a następnie naciśnij Enterponownie, wyjście będzie
* zmniejszono dalsze 27 bajtów dzięki pomocy Briana w wyświetlaniu komentarzy.
źródło
1math6
i2math6
. Nawet poprzednie 5 i następne 3 są odzwierciedlone między różnymi znakami. To 3spooky5me.Ruby, 340
Będzie to działać w dniach od 5 lutego 1924 r. Do 29 stycznia 2044 r.
źródło
GolfScript (212 znaków)
Używa znaków niedrukowalnych, więc oto wynik z xxd:
Równoważny program, który używa znaków zmiany znaczenia, a zatem jest nieco dłuższy, to:
Interesującą częścią jest obliczanie, biorąc pod uwagę datę, czy to przed, czy po chińskim Nowym Roku, który przypada w tym roku gregoriańskim. Czerpiąc inspirację z wielkanocnego algorytmu obliczeniowego, którego użyłem w poprzednim pytaniu, szukałem dość prostego obliczenia daty nowego roku. W końcu poszedłem z prostą formułą, która prowadzi mnie przez większość drogi, a także tabelą odnośników dla terminu błędu.
Proste obliczenie to
day_of_year = 21 + (19 * year % 30)
. Termin błędu mieści się w przedziale od0
do8
ponad zakresu zainteresowania (1924–2044) i nigdy nie zmienia się z roku na rok o więcej niż jeden, więc tabela przeglądowa jest zakodowana w zbalansowanym trójskładniku, a błąd jest obliczany poprzez zsumowanie terminów błędu prefiks tabeli.źródło
C #,
630611604572570 bajtów, 120 lat(dodaj ~ 2⅔ bajtów na dodatkowy rok, jeśli znasz przesunięcie)
Jest to dobre dla osób urodzonych od 31 stycznia 1900 r. Do 24 stycznia 2020 r. I prawdopodobnie ulegnie awarii poza tym zakresem. Czy są punkty bonusowe za liczbę lat objętych ubezpieczeniem?
Lub skondensowane (z dodanymi podziałami linii):
Jednym z trików było ustalenie pochodzenia tabeli offsetów 28 stycznia. Okazało się, że ma najmniejszą liczbę znaków.
Jeśli przypadkiem nalega, aby dane wejściowe były ciągiem, dodaj 22 znaki, aby zmienić podpis metody na:
i dodaj wiersz:
EDYCJE:
string.Split()
Inspiracja zaczerpnięta z odpowiedzi Eduarda Florinescu .źródło
" - "+new[]{"Yang","Yin"}[x%2]
na" - Y"+(x%2<1?"ang":"in")
:)Całkiem prosto z PHP za pomocą instrukcji Switch .
Obliczenia są tak daleko, jak chcesz ...
źródło