Мы все любим гороскопы, не так ли ? Но у меня есть серьезная проблема в этом приложении гороскопа, установленном на моем смартфоне, которое отображает только значок знака зодиака для каждого ежедневного гороскопа. Теперь я помню свой гороскоп, но трудно вспомнить, чей гороскоп меня интересует.
Вызов
Итак, вот ваш вызов для еще одного дополнения к серии ASCII Art of the Day. С учетом ввода даты и месяца выведите соответствующий знак зодиака в формате ASCII, как показано ниже. После каждого знака зодиака следует имя и диапазон дат ( DD MM
формат) для знака зодиака.
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
'-. .-'
: :
--:--:--
: :
.-' '-.
вход
- Вам будут предоставлены два целых числа, соответствующих дате месяца и месяцу года (в указанном порядке) дня рождения.
- Дата и месяц будут
1
проиндексированы, как в обычных календарях. - Вы можете взять входную форму STDIN / ARGV / аргументы функции или ближайший эквивалент
Выход
- В зависимости от того, в какой диапазон дат входит входная дата, выведите в STDOUT соответствующий знак зодиака.
- Вы можете иметь до 4 конечных пробелов в каждой строке, но нет начальных пробелов, которые не являются частью вывода.
- Вы можете написать полную программу или именованную функцию.
Это код-гольф, поэтому выигрывает самый короткий код в байтах!
Leaderboard
Первый пост серии генерирует таблицу лидеров.
Чтобы убедиться, что ваши ответы отображаются, начните каждый ответ с заголовка, используя следующий шаблон уценки:
# Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
# Ruby, <s>104</s> <s>101</s> 96 bytes
источник
Ответы:
CJam,
296284272265264 байтаПопробуйте онлайн в интерпретаторе CJam .
идея
Мы начинаем с объединения всех двенадцати знаков, используя строку в
<SP><LF>
качестве разделителя. Мы выбираем, чтобы знаки зодиака не содержали висячих пробелов, что позволяет легко их разделять.Объединенная строка имеет длину 542 байта. 236 из этих байтов являются пробелами, что составляет почти половину из них. Мы строим массив, который содержит 1 для каждого пробела и 0 для каждого не пробела. Таким образом, кодирование пробела будет стоить всего 1 бит.
Удаляя все пробелы из объединенной строки, мы остаемся с символами
<LF>."'()-/:J\_|
. Назначение каждому из них значения (например, индекса в этой строке) от 0 до 12Наконец, мы декодируем вышеупомянутые массивы base 2 и base 13 как байтовые массивы.
В конечной программе для заданного входного значения
DD MM
мы вычисляем(int(MM) + (int(DD) > 20)) % 12
обратный процесс, чтобы получить массив всех знаков зодиака и выбрать правильный.Код
источник
CJam, 324 байта
Моя первая попытка Попробуйте онлайн
источник
Python 2,
961698692687 байтОпределенно все еще собираюсь в гольф дальше, просто хотел изложить идею. Теперь с помощью словаря.
Старый метод, использующий чередование.
источник
Python 2,
565568553 байтаТаким образом, я был немного ленив и решил не играть в гольф этот AAotD. Вместо этого я решил дать питону сам гольф.
Вышеупомянутое решение было создано, используя код ниже:
источник
Perl, 414
Здесь не так много, просто применили сжатие словаря:
Проверь меня .
источник