ASCII Art of the Day #4 - Zodiac Signs We all love horoscopes, don't we? But I have a serious problem in this Horoscope App installed on my Smart Phone that it only displays the icon of the Zodiac Sign for each day's horoscope. Now, I do remember my horoscope, but its hard to remember others' whose horoscope I am interested in.

Challenge

So here is your challenge for an another addition to the ASCII Art of the Day series. Given a date and month input, output the corresponding Zodiac sign in ASCII format as shown below. Each Zodiac Sign is followed after the name and date range (DD MM format) for the zodiac sign.

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
'-.    .-'
   :  :
 --:--:--
   :  :
.-'    '-.


Input


You would be provided two integers corresponding to the date of month and 
month of year (in that order) of the birthday. 
The date and month will be 1 indexed like in normal calendars.
You can take input form STDIN/ARGV/function arguments or the closest equivalent


Output


Based on what date range the input date falls in, output to STDOUT, the corresponding Zodiac Sign.
You can have upto 4 trailing spaces in each line but no leading spaces that are not part of the output.
You can either write a full program or a named function.


This is code-golf so the shortest code in bytes wins!



Leaderboard

The first post of the series generates a leaderboard.

To make sure that your answers show up, please start every answer with a headline, using the following Markdown template:

# Language Name, N bytes


where N is the size of your submission. If you improve your score, you can keep old scores in the headline, by striking them through. For instance:

# Ruby, &lt;s&gt;104&lt;/s&gt; &lt;s&gt;101&lt;/s&gt; 96 bytes
CJam, 296 284 272 265 264 bytes

"03½åÙªWË#å¥ÜZ2ò'ýðDc}¦Ð£RÞ5ä&lt;Üå§ÖÞYÏuäOe¤¶è2²|ZëßB«ô¬cm"257b2bSf*Qa/"®=&amp;ðS¢Òpût£Ð`ç«^º,[öÄ©3¸YÝæ[%$&gt;\D£(´õÓÆeUØRHáÄ¡ããîùK½ÊÆÇ:UBÍm¥·fèäBÓEwWOkQq×tÌVfè£g8·¨    q©ñäp-ÁgUÚ´Éõ'&gt;r    Ê#"256bDb"
.\"'()-/:\_|J"f=.+sSN+/l~\K&gt;+=


Try it online in the CJam interpreter.

Idea

We start by joining all twelve signs using the string &lt;SP&gt;&lt;LF&gt; as separator. We opt for the zodiac signs not to contain trailing spaces, so this allows to separate them easily.

The joined string is 542 bytes long. 236 of these bytes are spaces, which is almost half of them. We build an array that contains a 1 for every space and a 0 for every non-space. This way, encoding a space will only cost 1 bit.

Removing all spaces from the joined string, we are left with the characters &lt;LF&gt;."'()-/:J\_|. Assigning each of them a value (e.g., the index in this string) between 0 and 12

Finally, we decode the above base 2 and base 13 arrays as byte arrays.

In the final program, for a given input DD MM, we compute (int(MM) + (int(DD) &gt; 20)) % 12, reverse the above process to obtain the array of all zodiac signs and select the proper one.

Code

"03½åÙªWË#å¥ÜZ2ò'ýðDc}¦Ð£RÞ5ä&lt;Üå§ÖÞYÏuäOe¤¶è2²|ZëßB«ô¬cm"

        e# Push the encoded space positions.

257b2b  e# Convert from base 257 to base 2.
Sf*     e# Replace 1's with spaces and 0's with empty strings.
Qa/     e# Split at empty strings.

"®=&amp;ðS¢Òpût£Ð`ç«^º,[öÄ©3¸YÝæ[%$&gt;\D£(´õÓÆeUØRHáÄ¡ããîùK½ÊÆÇ:UBÍm¥·fèäBÓEwWOkQq×tÌVfè£g8·¨ q©ñäp-ÁgUÚ´Éõ'&gt;r    Ê#"

        e# Push the encoded non-space characters.

256bDb  e# Convert from base 256 to base 13.

"
.\"'()-/:\_|J"f=

        e# Replace each digit in base 13 by the corresponding character.

.+s     e# Interleave both arrays to create a string.
SN+/    e# Split at trailing spaces.
l~      e# Evaluate the input from STDIN.
\K&gt;+    e# Add 1 to the month if the day is larger than 20.
=       e# Retrieve the corresponding element from the array.