Поздравляем! Вы только что были наняты НАСА для работы над новым проектом Horizons 2.
К сожалению, в последнее время произошли огромные сокращения бюджета, поэтому высшее руководство решило подделать весь запланированный полет Плутона (как они это сделали для посадок на Луну в 70-х годах).
Ваша задача - написать программу, которая будет принимать в качестве входных данных дату в формате yyyymmdd
и предоставит поддельную фотографию Плутона на эту дату. Вы можете предположить, что введенная дата будет в 2015 или 2016 году.
Фотография представляет собой сетку 15x15 символов ASCII. Символы в сетке имеют свои x- и y-координаты в пределах диапазона [-7, 7]
- верхний левый символ находится в (-7, -7)
то время как нижний правый символ в (7, 7)
.
Фотография будет рассчитана по следующим правилам:
- Зонд будет ближайшим к Плутону 25/12/2015
- Расстояние
d
до Плутона определяется по формуле:square root of ((difference in days to christmas) ^ 2 + 10)
- Радиус
r
изображения Плутона на фото:22 / d
- Символ с координатами
(x, y)
на сетке должен быть установлен в#
ifx^2 + y^2 <= r^2
; в противном случае он должен быть установлен на пробел. - Есть звезды в положениях
(-3, -5)
,(6, 2)
,(-5, 6)
,(2, 1)
,(7, -2)
. Звезды представлены точкой.
, и они, конечно, скрыты Плутоном.
Еще одна вещь: совет НАСА пришел к выводу, что открытие жизни на Плутоне, вероятно, приведет к существенному увеличению бюджета. Ваша программа должна добавить подсказки жизни на Плутоне:
- Когда расстояние до Плутона <= 4, добавьте плутоний в координатах
(-3,-1)
:(^_^)
Пример фотографии для ввода 20151215
: (Ваш код должен иметь все новые строки, как этот код)
.
# .
###
#####
###.
# .
.
Фотография для ввода 20151225
:
#######
#########
###########
#############
#############.
###(^_^)#####
#############
#############
#############
#############
###########
#########
. #######
Для сравнения, вот фотография спутника Плутона "Гидра", сделанная New Horizons. Различия едва заметны с нашим искусством ASCII.
Это код гольф, поэтому выигрывает самый короткий код в байтах!
`
с в пользу<pre><code>
; не стесняйтесь откатиться, если вам это не нравится.You can assume the entered date will be in the year 2015 or 2016.
Но тогда зачем вообще указывать год?Ответы:
JavaScript (ES6), 237 байт
Живая демоверсия . Запустите в Firefox.
Оригинальная версия
Игра в гольф
Это было весело для гольфа.
Мне не нужно создавать объект Date, поэтому я жестко закодировал значение в миллисекундах, чтобы сохранить 13 байтов:
Замените ассоциативный массив строкой с разделителями, чтобы исключить 9 байтов:
Самый большой рефакторинг заменял циклы for на вложенные рекурсивные IIFE, чтобы отбросить 10 байтов:
Я также избавился от еще
Math.sqrt
8 байтов.вопросы
Я мог получить только правильную фотографию для тестовых случаев, изменив ближайшую дату на 2015/12/24, и я не знаю, заключается ли проблема в моем коде или в вопросе. Пожалуйста, уточните, и я обновлю свой ответ.Вот мой вывод, используя отличия от 2015/12/25.Изменить: Обновленный ответ, чтобы использовать Рождество в качестве ближайшей даты.
Фотография для "20151215":
Фотография для "20151225":
источник
C # 4.0, 393 байта
Пример:
Выход:
источник
CJam, 165 байт
Первая часть вычисляет разницу в днях и сохраняет ее в
D
переменной. Остальное - двойной цикл, который повторяетX
иY
.Попробуй это здесь
источник