Étant donné que le nouvel an chinois arrive, voici un défi pour calculer le zodiaque chinois, l'élément et le Taijitu pour une date donnée.
L'entrée doit être une date:
1/31/2014
La date utilisée ici est le style américain mm/dd/yyyy
, mais peut également être de style ISO-8601: yyyy-mm-dd
le style de saisie de la date n'est donc pas strict.
La sortie doit être le signe animal dans le zodiaque chinois, y compris l'élément qui correspond à la date, et son homologue Taijitu :
Horse - Wood - Yang
Un tableau montrant la relation Zodiaque - élément - Taijitu peut être vu ici: Zodiaque chinois - Années
Le format de sortie n'est pas strict mais doit contenir des éléments animal, élément et Taijitu, et doit être délimité d'une certaine manière.
Des exemples de sortie valide pour la date ci-dessus peuvent inclure:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Votre programme doit renvoyer une sortie valide pour une plage d'au moins 100 ans, y compris la date d'aujourd'hui. Cela signifie qu'il devra tenir compte d'au moins deux cycles de 60 ans ( sexagénaires ).
Réponses:
Mathematica 63
D'accord, cela peut vieillir, mais cela fonctionne (la saisie de la date est ambiguë dans de nombreux cas):
Exemple:
la source
C # -
357337339 octetsFormaté:
la source
string.Format
.Python 2: 360 *
387586594- PersonnagesEncore réduit
Le code ci-dessus fonctionne pour l'intervalle suivant: 5 février 1924 - 31 décembre 2043
Exemple: après avoir collé le code ci-dessus dans le curseur de l'interpréteur python
puis appuyez sur Enter, entrez une date comme celle-ci
puis appuyez à Enternouveau, la sortie sera
* réduit encore 27 octets avec l'aide de Brian voir les commentaires.
la source
1math6
et2math6
. Même le précédent 5 et le suivant 3 sont mis en miroir avec différents caractères entre eux. C'est 3spooky5me.Rubis, 340
Cela fonctionnera pour les dates entre le 5 février 1924 et le 29 janvier 2044.
la source
GolfScript (212 caractères)
Cela utilise des caractères non imprimables, voici donc la sortie de xxd:
Un programme équivalent qui utilise des échappements de chaîne et est donc un peu plus long est:
La partie intéressante est le calcul, compte tenu de la date, que ce soit avant ou après le nouvel an chinois qui tombe dans cette année grégorienne. En m'inspirant de l' algorithme de calcul de Pâques que j'ai utilisé dans une question précédente, j'ai cherché un calcul assez simple de la date du Nouvel An. En fin de compte, j'ai opté pour une formule simple qui me permet d'obtenir la plupart du temps, plus une table de recherche pour le terme d'erreur.
Le calcul simple est
day_of_year = 21 + (19 * year % 30)
. Le terme d'erreur varie de0
à8
plus de la plage d'intérêt (1924 à 2044) et ne change jamais d'année en année de plus d'un, de sorte que la table de recherche est codée en ternaire équilibré et l'erreur est calculée en additionnant les termes d'erreur d'un préfixe du tableau.la source
C #,
630611604572570 octets, 120 ans(ajoutez ~ 2⅔ octets par année supplémentaire si vous connaissez le décalage)
Ceci est bon pour les personnes nées du 31 janvier 1900 au 24 janvier 2020 et tombera probablement en dehors de cette plage. Y a-t-il des points bonus pour le nombre d'années couvertes?
Ou condensé (avec des sauts de ligne supplémentaires):
L'une des astuces était d'avoir l'origine de la table offset au 28 janvier. Cela s'est avéré avoir le plus petit nombre de caractères.
Si par hasard on insiste sur le fait que l'entrée est une chaîne, ajoutez 22 caractères pour changer la signature de la méthode en:
et ajoutez la ligne:
MODIFICATIONS:
string.Split()
Inspiration tirée de la réponse d' Eduard Florinescu .la source
" - "+new[]{"Yang","Yin"}[x%2]
pour" - Y"+(x%2<1?"ang":"in")
:)Assez simple avec PHP en utilisant l'instruction Switch .
Le calcul est aussi loin que vous le souhaitez ...
la source