Учитывая, что наступает китайский Новый год, перед нами стоит задача расчета китайского зодиака, стихии и тайдзюду для данной даты.
На входе должна быть дата:
1/31/2014
Дата, используемая здесь, является стилем США mm/dd/yyyy
, но альтернативно может быть стилем ISO-8601: yyyy-mm-dd
поэтому стиль ввода даты не является строгим.
На выходе должен быть знак животного в китайском зодиаке, включая элемент, соответствующий дате, и его аналог Taijitu :
Horse - Wood - Yang
Таблицу, показывающую отношение Зодиак - элемент - Тайцзюту можно увидеть здесь: Китайский Зодиак - Годы
Формат вывода не является строгим, но должен содержать звери, элемент и компонент Taijitu, и должен каким-то образом разделяться.
Примеры правильного вывода на вышеуказанную дату могут включать:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Ваша программа должна возвращать действительные выходные данные в течение как минимум 100 лет, включая сегодняшнюю дату. Это означает, что он должен учитывать как минимум два 60-летних ( Sexagenary ) цикла.
Ответы:
Mathematica 63
Хорошо, это может быть старым, но это работает (ввод данных неоднозначен во многих случаях):
Пример:
источник
C # -
357337339 байтотформатирован:
источник
string.Format
.Python 2: 360 *
387586594- ПерсонажиСнижается дальше
Приведенный выше код работает для следующего интервала: 5 февраля 1924 г. - 31 декабря 2043 г.
Пример: после вставки вышеуказанного кода в курсор интерпретатора Python
и затем нажмите Enter, введите дату, подобную этой
и затем нажмите еще Enterраз, вывод будет
* уменьшено еще на 27 байт с помощью Брайана, см. комментарии.
источник
1math6
и2math6
. Даже предыдущие 5 и последующие 3 отражаются между разными символами. Это 3spooky5me.Рубин, 340
Это будет работать для дат между 5 февраля 1924 года и 29 января 2044 года.
источник
GolfScript (212 символов)
Здесь используются непечатаемые символы, поэтому вот вывод из xxd:
Эквивалентная программа, которая использует экранирование строк и, следовательно, немного длиннее:
Интересная часть вычислений, учитывая дату, будь то до или после китайского Нового года, который приходится на этот григорианский год. Вдохновившись алгоритмом вычисления Пасхи, который я использовал в предыдущем вопросе, я искал достаточно простой расчет даты Нового года. В конце концов, я выбрал простую формулу, которая дает мне большую часть пути, плюс таблицу поиска для термина ошибки.
Простой расчет есть
day_of_year = 21 + (19 * year % 30)
. Термин ошибки в диапазоне от0
до8
более интересующего диапазона (1924 до 2044), и никогда не меняется из года в год более чем на один, так что таблица перекодировки кодируются в сбалансированном тройном и вычисляется ошибка путем суммирования условия погрешности префикс таблицы.источник
C #,
630611604572570 байт, 120 лет(добавьте ~ 2⅔ байта за дополнительный год, если вы знаете смещение)
Это хорошо для людей, рожденных с 31 января 1900 года по 24 января 2020 года, и, вероятно, потерпит крах за пределами этого диапазона. Есть ли бонусные баллы за количество лет?
Или сжатый (с добавлением разрывов строк):
Один из приемов состоял в том, чтобы иметь происхождение таблицы смещения в 28 января. Это оказалось самым низким количеством символов.
Если случайно настаивает, что ввод является строкой, добавьте 22 символа, чтобы изменить сигнатуру метода на:
и добавьте строку:
правок:
string.Split()
Вдохновение взято из ответа Эдуарда Флоринеску .источник
" - "+new[]{"Yang","Yin"}[x%2]
на" - Y"+(x%2<1?"ang":"in")
:)Довольно просто с PHP, используя оператор Switch .
Расчет так далеко, как вы хотите ...
источник