Escreva um programa que use uma data de nascimento (mês e dia do mês) como entrada e produz o sinal, elemento e qualidade correspondentes do zodíaco ocidental . Para os propósitos deste desafio, eles são definidos exatamente como na tabela na página da wikipedia vinculada:
Sign Date Range Element Quality
Aries March 21 to April 19 Fire Cardinal
Taurus April 20 to May 20 Earth Fixed
Gemini May 21 to June 21 Air Mutable
Cancer June 22 to July 22 Water Cardinal
Leo July 23 to August 22 Fire Fixed
Virgo August 23 to September 22 Earth Mutable
Libra September 23 to October 23 Air Cardinal
Scorpio October 24 to November 20 Water Fixed
Sagittarius November 21 to December 22 Fire Mutable
Capricorn December 23 to January 20 Earth Cardinal
Aquarius January 21 to February 21 Air Fixed
Pisces February 22 to March 20 Water Mutable
Regras
- O sinal, elemento e qualidade serão calculados a partir da data de entrada exatamente de acordo com a tabela da Wikipedia.
- Estou dando liberdade ao formato da data de entrada (consulte a seção Entrada abaixo). Você deve indicar claramente em sua resposta qual formato está usando.
- Se uma data inválida for fornecida (data não analisável ou mês ou dia do mês fora do intervalo), o programa sairá com a mensagem
Invalid date
. - O programa deve lidar corretamente com os anos bissextos. ou seja, se 29 de fevereiro é a entrada, a saída deve ser corretamente
Pisces, Water, Mutable
. - As bibliotecas / APIs de data do seu idioma são permitidas, mas qualquer API que calcule especificamente os signos do zodíaco é proibida.
- “Brechas” padrão que não são mais engraçadas
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Entrada
- O programa pode ler a data de entrada no STDIN, na linha de comando, nas variáveis de ambiente ou em qualquer método conveniente para o seu idioma de escolha.
- Isso não é principalmente um exercício de análise de cadeia de dados; portanto, a sequência de entrada pode ser fornecida no formato que você escolher, desde que consista apenas em componentes de mês e dia do mês e não em outros valores (como ano ou hora) . Por exemplo,
Jul 24
ou24th of July
ou7/24
ou24/07
ou qualquer formato que seja conveniente. Se a entrada que não corresponde à sua escolha de formato de entrada for inserida, oInvalid date
erro deverá ser gerado.
Resultado
- O programa exibirá STDOUT, caixa de diálogo ou qualquer outro método de exibição conveniente para o seu idioma de escolha.
- O formato de saída será o sinal, o elemento e a qualidade separados por vírgula e espaço:
Sign, Element, Quality
Exemplos
Input Output
1/1 Capricorn, Earth, Cardinal
2/29 Pisces, Water, Mutable
7/24 Leo, Fire, Fixed
13/1 Invalid date
2/31 Invalid date
-1/-1 Invalid date
1st of Golfember Invalid date
code-golf
kolmogorov-complexity
date
Trauma Digital
fonte
fonte
Jan 21 -> 21
,Feb 5 -> 36
) é um formato de entrada válido?Respostas:
JavaScript, 285 bytes
(Minha primeira resposta aqui depois de espreitar aqui por um tempo)
O primeiro
prompt()
é o mês em formato numérico e o segundoprompt()
é o dia do mês (ignore o texto do prompt). Os zeros à esquerda são opcionais para ambos. A saída é exibida comalert()
. (Agradecemos a bitpwner, Snack, edc65 e core1024 por ajudar a diminuir o código.)Experimente acima usando Snippets de pilha ou em http://jsfiddle.net/8vq89/5/ .
Código com espaço em branco e comentários para explicar as partes confusas adicionadas:
fonte
'Cardinal0Fixed0Mutable'.split(0)
e'Earth0Air0Water0Fire'.split(0)
,['Cardinal','Fixed','Mutable']
e['Earth','Air','Water','Fire']
é um pouco mais curto.z='Air9Water9Fire9Earth9Fixed9Mutable9Cardinal9Aquarius9Pisces9Aries9Taurus9Gemini9Cancer9Leo9Virgo9Libra9Scorpio9Sagittarius9Capricorn'.split(9); [m,d]=prompt().split(/\D/); alert([m-->0&m<12&d>0&d<(32-'020101001010'[m])?z[(m+=(18-~'121012333413'[m]<d)+11)%12+7]+', '+z[m%4]+', '+z[m%3+4]:'Invalid date'])
. Dê uma olhada na divisão únicaInvalid left-hand side in assignment
erro quando tento executar esse, provavelmente tem a ver com o promptp=prompt().split(/\D/),m=p[0],d=p[1]
deve trabalhar (mas de modo mais)'...ScorpioSagittarius'.match(/[A-Z][a-z]+/g)
em vez de'...Scorpio0Sagittarius'.split(0)
C 353
352Editar Corrigido bug e erro de digitação, mais 1 char
Antes de perguntar: sim, mesmo sem #include é válido e está funcionando como padrão C.
Formato de entrada: dois números, primeiro mês e depois dia.
Teste
fonte
Ivalid
;-) #Perl 287 (286 + 1 para a
-p
bandeira)A entrada é de STDIN e a saída vai para STDOUT. Aqui estão os testes do OP:
fonte
Python,
447387caracteresAceita entrada como MM / DD, sempre deve ter dois dígitos.
fonte
[20,21,20,19,20,21,22,22,22,23,20,22][a%12]
->19+int('121012333413'[a%12])
e[32,30,32,31,32,31,32,32,31,32,31,32][a]
->30+int('202121221212'[a])
Javascript,
403396 bytesOutra abordagem. Acho que posso jogar mais, mas mais tarde.
Mês de entrada no primeiro prompt, data no segundo prompt.
fonte
PHP - 294 bytes (sem tags php *)
* Como a outra entrada php fez
Entrada:
Month Day
como números inteiros, zero à esquerda não é necessário.Ex:
php starsign.php <<< "2 29"
para 29 de fevereiro.Golfed (não copie isso diretamente, veja abaixo):
Hexdump do arquivo php:
Para gerar arquivo golfed, execute o seguinte script php (gera para
starsign.php
):Versão completamente não destruída:
fonte
short_open_tag = On
para que isso funcione. Funciona para esta resposta, mas a outra resposta do PHP ainda gera erros. +1 para este.Python 3 - 332 bytes
Recebe entrada como argumentos separados (ie
1 1
)Uma divisão para todas as strings
A indexação de bytes no py3 fornece a ordem
or E
é uma maneira barata de gerar uma exceção (NameError
)Existe uma maneira mais barata de concatenar as strings?
+
e literais acabaram sendo menores quejoin
.Não há uma boa razão para que uma pesquisa de bytes comece com 1 e a outra com 0, eu esqueci o dia 29 de fevereiro e mudei 0-> 1 em vez de refazer tudo.
fonte
PHP
548524502419 (sem tags php)Requer PHP> = 5.4.0
Entrada:
Day Month
(valor numérico começando em 1), por exemplo,2 3
para 2 de março.EDIT: O
A non well formed numeric value
aviso é causado pela execução de um pré-incremento na string$m
. Independentemente do aviso, a seguinte saída ainda deve estar correta. Este aviso varia de acordo com a versão doPHP
. Para corrigir isso, uma string simples para conversão de número inteiro deve ser colocada antes da segunda última linha. Atualizei o código com as conversões.Entrada / Saída de amostra (no Windows):
fonte
echo 2 3 | php -f zod.php
, mas apenas ecoa o próprio script para STDOUT #<?php
vez de<?
.PHP Notice: A non well formed numeric value encountered in /home/ubuntu/zod.php on line 6
. Estou executando o php 5.5.9 no Ubuntu 14.04