Parabéns! Você acabou de ser contratado pela NASA para trabalhar no novo projeto Horizons 2.
Infelizmente, houve enormes cortes no orçamento recentemente, então a alta gerência decidiu fingir todo o sobrevoo planejado de Plutão (como fizeram nos pousos na lua nos anos 70).
Sua tarefa é escrever um programa que aceite como entrada uma data no formato yyyymmdd
e forneça uma fotografia falsa de Plutão para essa data. Você pode supor que a data inserida será no ano de 2015 ou 2016.
A fotografia é uma grade 15x15 de caracteres ASCII. Os caracteres na grade têm suas coordenadas xe y dentro do intervalo [-7, 7]
- o caractere superior esquerdo está em (-7, -7)
enquanto o caractere inferior direito está em (7, 7)
.
A fotografia será calculada com as seguintes regras:
- A sonda será a mais próxima de Plutão em 25/12/2015
- A distância
d
para Plutão é dada por esta fórmula:square root of ((difference in days to christmas) ^ 2 + 10)
- O raio
r
da imagem de Plutão na foto é dado por:22 / d
- Um caractere com coordenadas
(x, y)
na grade deve ser definido como#
sex^2 + y^2 <= r^2
; caso contrário, ele deve ser definido como espaço. - Há estrelas em posições
(-3, -5)
,(6, 2)
,(-5, 6)
,(2, 1)
,(7, -2)
. As estrelas são representadas por um ponto.
e, é claro, são escondidas por Plutão.
Mais uma coisa: o conselho da NASA chegou à conclusão de que a descoberta da vida em Plutão provavelmente resultaria em um aumento substancial do orçamento. Seu programa deve adicionar pistas da vida em Plutão:
- Quando a distância até Plutão for <= 4, adicione um plutoniano nas coordenadas
(-3,-1)
:(^_^)
Exemplo de fotografia para entrada 20151215
: (Seu código deve ter todas as novas linhas como este código)
.
# .
###
#####
###.
# .
.
Fotografia para entrada 20151225
:
#######
#########
###########
#############
#############.
###(^_^)#####
#############
#############
#############
#############
###########
#########
. #######
Como comparação, aqui está uma foto do satélite Hydra de Plutão, tirada pela New Horizons. As diferenças são quase imperceptíveis em nossa arte ASCII.
Isso é código de golfe, então o código mais curto em bytes vence!
`
s a favor de<pre><code>
; sinta-se à vontade para reverter se não gostar.You can assume the entered date will be in the year 2015 or 2016.
Mas então por que especificar um ano?Respostas:
JavaScript (ES6), 237 bytes
Demonstração ao vivo . Execute no Firefox.
Versão original
Golfe
Foi divertido jogar golfe.
Como não preciso criar um objeto Date, codifiquei o valor em milissegundos para salvar 13 bytes:
Substitua a matriz associativa por uma sequência delimitada para eliminar 9 bytes:
O maior refator foi substituir os loops for por IIFE s aninhados e recursivos para eliminar 10 bytes:
Eu também me livrei de
Math.sqrt
mais 8 bytes.Problemas
Só consegui a fotografia correta para os casos de teste alterando a data mais próxima para 24/12/2015, e não sei se o problema está no meu código ou na pergunta. Esclareça e atualizarei minha resposta.Aqui está a minha saída usando as diferenças de 25/12/2015.Editar: resposta atualizada para usar o Natal como a data mais próxima.
Fotografia para "20151215":
Fotografia para "20151225":
fonte
C # 4.0, 393 bytes
Exemplo:
Saída:
fonte
CJam, 165 bytes
A primeira parte calcula a diferença do dia e a armazena na
D
variável O resto é um loop duplo que itera através deX
eY
.Teste aqui
fonte