Dado que se acerca el Año Nuevo chino, aquí hay un desafío para calcular el zodiaco chino, el elemento y el Taijitu para una fecha determinada.
La entrada debe ser una fecha:
1/31/2014
La fecha utilizada aquí es el estilo de EE. UU. mm/dd/yyyy
, Pero también puede ser el estilo ISO-8601: yyyy-mm-dd
por lo tanto, el estilo de entrada de fecha no es estricto.
La salida debe ser el signo animal en el zodiaco chino, incluido el elemento que corresponde a la fecha, y su contraparte Taijitu :
Horse - Wood - Yang
Una tabla que muestra el zodiaco - elemento - relación Taijitu se puede ver aquí: Zodiaco chino - Años
El formato de salida no es estricto, pero debe contener animal, elemento y componente Taijitu, y debe estar delimitado de alguna manera.
Los ejemplos de resultados válidos para la fecha anterior pueden incluir:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Su programa debe devolver resultados válidos para un rango de al menos 100 años, incluida la fecha de hoy. Esto significa que tendrá que tener en cuenta al menos dos ciclos de 60 años ( sexagenario ).
Respuestas:
Mathematica 63
De acuerdo, esto puede estar envejeciendo, pero funciona (la entrada de fecha es ambigua en muchos casos):
Ejemplo:
fuente
C # -
357337339 bytesFormateado:
fuente
string.Format
.Python 2: 360 *
387586594- PersonajesReducido aún más
El código anterior funciona para el siguiente intervalo: 5 de febrero de 1924 - 31 de diciembre de 2043
Ejemplo: después de pegar el código anterior en el cursor del intérprete de Python
y luego presione Enter, ingrese una fecha como esta
y luego presione Enternuevamente, la salida será
* reducido 27 bytes más con la ayuda de Brian ver comentarios.
fuente
1math6
y2math6
. Incluso el precedente 5 y los siguientes 3 se reflejan con diferentes caracteres intermedios. Eso es 3spooky5me.Rubí, 340
Esto funcionará para las fechas entre el 5 de febrero de 1924 y el 29 de enero de 2044.
fuente
GolfScript (212 caracteres)
Esto utiliza caracteres no imprimibles, así que aquí está la salida de xxd:
Un programa equivalente que usa escapes de cadena y, por lo tanto, es un poco más largo es:
La parte interesante es la computación, dada la fecha, si es antes o después del Año Nuevo chino que cae en ese año gregoriano. Inspirándome en el algoritmo de cálculo de Pascua que he usado en una pregunta anterior, busqué un cálculo razonablemente simple de la fecha de Año Nuevo. Al final, elegí una fórmula simple que me lleva a la mayor parte del camino, más una tabla de búsqueda para el término de error.
El cálculo simple es
day_of_year = 21 + (19 * year % 30)
. Los rangos de término de error de0
a8
lo largo del intervalo de interés (1924-2044), y nunca cambia de año en año por más de uno, por lo que la tabla de búsqueda se codifica en ternario equilibrado y se calcula el error sumando los términos de error de una prefijo de la tabla.fuente
C #,
630611604572570 bytes, 120 años(agregue ~ 2⅔ bytes por año adicional si conoce el desplazamiento)
Esto es bueno para las personas nacidas del 31 de enero de 1900 al 24 de enero de 2020 y es probable que se estrelle fuera de ese rango. ¿Hay puntos de bonificación por la cantidad de años cubiertos?
O condensado (con saltos de línea añadidos):
Uno de los trucos fue tener el origen de la tabla de compensación al 28 de enero. Esto demostró tener el recuento de caracteres más bajo.
Si por casualidad se insiste en que la entrada es una cadena, agregue 22 caracteres para cambiar la firma del método a:
y agrega la línea:
EDICIONES:
string.Split()
Inspiración tomada de la respuesta de Eduard Florinescu .fuente
" - "+new[]{"Yang","Yin"}[x%2]
a" - Y"+(x%2<1?"ang":"in")
:)Bastante sencillo con PHP usando la instrucción Switch .
El cálculo es tan lejos como quieras ...
fuente