Todos nós amamos horóscopos, não é ? Mas tenho um problema sério neste aplicativo horóscopo instalado no meu telefone inteligente, que exibe apenas o ícone do signo do zodíaco para o horóscopo de cada dia. Agora, lembro-me do meu horóscopo, mas é difícil lembrar de outras pessoas cujo horóscopo me interessa.
Desafio
Então, aqui está o seu desafio para mais uma adição à série ASCII Art of the Day. Dada a entrada de data e mês, emita o sinal correspondente do zodíaco no formato ASCII, como mostrado abaixo. Cada signo é seguido após o nome e o intervalo de datas ( DD MM
formato) do signo.
Aries - 21 03 - 20 04
.-. .-.
(_ \ / _)
|
|
Taurus - 21 04 - 20 05
. .
'.___.'
.' '.
: :
: :
'.___.'
Gemini - 21 05 - 20 06
._____.
| |
| |
_|_|_
' '
Cancer - 21 06 - 20 07
.--.
/ _'.
(_) ( )
'. /
'--'
Leo - 21 07 - 20 08
.--.
( )
(_) /
(_.
Virgo - 21 08 - 20 09
_
' ':--.--.
| | |_
| | | )
| | |/
(J
Libra - 21 09 - 20 10
__
___.' '.___
____________
Scorpio - 21 10 - 20 11
_
' ':--.--.
| | |
| | |
| | | ...
'---':
Sagittarius - 21 11 - 20 12
...
.':
.'
'..'
.''.
Capricorn - 21 12 - 20 01
_
\ /_)
\ /'.
\ / :
\/ __.'
Aquarius - 21 01 - 20 02
.-"-._.-"-._.-
.-"-._.-"-._.-
Pisces - 21 02 - 20 03
'-. .-'
: :
--:--:--
: :
.-' '-.
Entrada
- Você receberá dois números inteiros correspondentes à data do mês e ao mês do ano (nessa ordem) do aniversário.
- A data e o mês serão
1
indexados como nos calendários normais. - Você pode usar argumentos de função STDIN / ARGV / function ou o equivalente mais próximo
Resultado
- Com base no intervalo de datas em que a data de entrada se enquadra, a saída para STDOUT, o correspondente signo do zodíaco.
- Você pode ter até 4 espaços à direita em cada linha, mas nenhum espaço à esquerda que não faça parte da saída.
- Você pode escrever um programa completo ou uma função nomeada.
Isso é código-golfe, então o código mais curto em bytes vence!
Entre os melhores
O primeiro post da série gera uma tabela de classificação.
Para garantir que suas respostas sejam exibidas, inicie todas as respostas com um título, usando o seguinte modelo de remarcação:
# Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
# Ruby, <s>104</s> <s>101</s> 96 bytes
fonte
Respostas:
CJam,
296284272265264 bytesExperimente on-line no intérprete CJam .
Idéia
Começamos juntando todos os doze sinais usando a corda
<SP><LF>
como separador. Optamos por que os signos do zodíaco não contenham espaços à direita, portanto isso permite separá-los facilmente.A cadeia de caracteres unida tem 542 bytes. 236 desses bytes são espaços, que são quase metade deles. Construímos uma matriz que contém um 1 para cada espaço e um 0 para cada não-espaço. Dessa forma, a codificação de um espaço custará apenas 1 bit.
Removendo todos os espaços da cadeia de caracteres unida, ficamos com os caracteres
<LF>."'()-/:J\_|
. Atribuindo a cada um deles um valor (por exemplo, o índice nessa sequência) entre 0 e 12Finalmente, decodificamos as matrizes base 2 e 13 acima como matrizes de bytes.
No programa final, para uma determinada entrada
DD MM
, calculamos(int(MM) + (int(DD) > 20)) % 12
, invertemos o processo acima para obter a matriz de todos os signos do zodíaco e selecionar o apropriado.Código
fonte
CJam, 324 bytes
Minha primeira tentativa. Experimente online
fonte
Python 2,
961698692687 bytesDefinitivamente ainda vou jogar golfe, só queria colocar uma idéia. Agora usando um dicionário.
Método antigo, usando intercalação.
fonte
Python 2,
565568553 bytesPor isso, fiquei um pouco preguiçoso e decidi não jogar golfe neste AAotD. Em vez disso, decidi deixar o próprio python jogar golfe.
A solução acima foi criada usando o código abaixo:
fonte
Perl, 414
Não há muito o que fazer aqui, apenas aplique a compactação de dicionário:
Me teste .
fonte