Dado que o Ano Novo Chinês está chegando, aqui está um desafio para calcular o Zodíaco Chinês, o elemento e o Taijitu para uma determinada data.
A entrada deve ser uma data:
1/31/2014
A data usada aqui é o estilo dos EUA mm/dd/yyyy
, mas, alternativamente, pode ser o estilo ISO-8601: yyyy-mm-dd
portanto, o estilo da entrada de data não é rigoroso.
A saída deve ser o signo do animal no zodíaco chinês, incluindo o elemento que corresponde à data e seu equivalente no Taijitu :
Horse - Wood - Yang
Uma tabela mostrando a relação Zodíaco - elemento - Taijitu pode ser vista aqui: Zodíaco Chinês - Anos
O formato de saída não é rigoroso, mas deve conter animal, elemento e componente Taijitu e deve ser delimitado de alguma maneira.
Exemplos de saída válida para a data acima podem incluir:
(horse, wood, yang)
["Horse", "Wood", "Yang"]
Seu programa deve retornar uma saída válida por um período de pelo menos 100 anos, incluindo a data de hoje. Isso significa que será necessário contabilizar pelo menos dois ciclos de 60 anos ( Sexagenary ).
Respostas:
Mathematica 63
Ok, isso pode estar ficando velho, mas funciona (a entrada de data é ambígua em muitos casos):
Exemplo:
fonte
C # -
357337339 bytesFormatado:
fonte
string.Format
.Python 2: 360 *
387586594- PersonagensReduzido ainda mais
O código acima funciona para o seguinte intervalo: 5 de fevereiro de 1924 - 31 de dezembro de 2043
Exemplo: após colar o código acima no cursor do interpretador python
e pressione Enter, insira uma data como esta
e pressione Enternovamente, a saída será
* reduziu mais 27 bytes com a ajuda de Brian para ver comentários.
fonte
1math6
e2math6
. Mesmo os 5 anteriores e os 3 seguintes são espelhados com caracteres diferentes entre eles. Isso é 3spooky5me.Ruby, 340
Isso funcionará para datas entre 5 de fevereiro de 1924 e 29 de janeiro de 2044.
fonte
GolfScript (212 caracteres)
Isso usa caracteres não imprimíveis, então aqui está a saída do xxd:
Um programa equivalente que usa escape de string e, portanto, é um pouco mais longo é:
A parte interessante é a computação, dada a data, seja antes ou depois do Ano Novo Chinês, que cai naquele ano gregoriano. Inspirando-me no algoritmo de cálculo da Páscoa que usei em uma pergunta anterior, procurei um cálculo razoavelmente simples da data do Ano Novo. No final, adotei uma fórmula simples que me leva até o fim, além de uma tabela de pesquisa para o termo do erro.
O cálculo simples é
day_of_year = 21 + (19 * year % 30)
. O termo do erro varia de0
até8
o intervalo de interesse (1924 a 2044) e nunca muda de ano para ano em mais de um, portanto, a tabela de pesquisa é codificada em ternário balanceado e o erro é calculado somando os termos de erro de um prefixo da tabela.fonte
C #,
630611604572570 bytes, 120 anos(adicione ~ 2⅔ bytes por ano adicional, se você souber o deslocamento)
Isso é bom para as pessoas nascidas de 31 de janeiro de 1900 a 24 de janeiro de 2020 e provavelmente cairá fora desse intervalo. Existem pontos de bônus para o número de anos cobertos?
Ou condensado (com quebras de linha adicionais):
Um dos truques era ter a origem da mesa de compensação em 28 de janeiro. Isso provou ter a menor contagem de caracteres.
Se por acaso insistir que a entrada é uma sequência, adicione 22 caracteres para alterar a assinatura do método para:
e adicione a linha:
EDITAR% S:
string.Split()
Inspiração tirada da resposta de Eduard Florinescu .fonte
" - "+new[]{"Yang","Yin"}[x%2]
a" - Y"+(x%2<1?"ang":"in")
:)Bem direto com o PHP usando a instrução Switch .
O cálculo é o quanto você deseja ...
fonte