Desafio
Dada a fase da lua, desenhe-a usando arte ASCII.
O seu programa deve lidar com lua nova, crescente crescente, primeiro trimestre, crescente crescente, lua cheia, crescente crescente, último trimestre e crescente crescente. Sua entrada será um número inteiro.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
A arte ASCII é toda colocada em uma grade 16x8 (devido à proporção da dimensão dos caracteres). Você pode substituir .
por qualquer caractere e #
por qualquer outro caractere que não seja um espaço em branco.
A saída para lua nova deve ser:
................
................
................
................
................
................
................
................
Para encerar crescente:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
No primeiro trimestre:
........########
........########
........########
........########
........########
........########
........########
........########
Para encerar gibbous:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
E para lua cheia:
################
################
################
################
################
################
################
################
O crescente crescente é apenas o crescente crescente, com cada linha invertida, assim como o gibbous minguante e o gibbous crescente, e o primeiro e o último trimestre.
Regras
- As brechas padrão se aplicam
- Você pode escolher encerar / diminuir na direção oposta, se desejar, embora isso não faça diferença (os gráficos mostrados nesta pergunta são para o hemisfério norte)
- Sua saída deve ser exatamente como especificado. Suas novas linhas podem ser qualquer separador de linha razoável e você pode ter uma nova linha à direita, se desejar.
MoonPhase["Icon"]
é 17 bytes no Mathematica…Respostas:
Geléia ,
4332 bytes-7 bytes movendo-se da máscara de bits para a máscara de comparação
-2 bytes com algumas melhorias de programação tácita
-1 byte movendo-se para o hemisfério sul
-1 byte - use o novo
ɓ
separador de correntes ... seu primeiro uso!Usa os caracteres
0
para.
e1
para#
.Todos os casos em um conjunto de testes em Experimente online!
Quão?
Constrói uma máscara capturando as quatro primeiras fases e, em vez de reverter as linhas, complementa os valores resultantes do resultado da fase do módulo-4 quando a fase div-4 é diferente de zero.
I originalmente construído uma máscara de bits, mas os valores de máscara foram
0
,8
,12
, e14
-0000
,1000
,1100
e1110
- estes têmphase
os líderes - uma comparação-máscara pode ser usada.fonte
JavaScript (ES6),
121...10392 bytesDemo
Mostrar snippet de código
fonte
Haskell ,
9890 bytesEle percorre as linhas e colunas usando a mônada da lista (um
do
bloco para linhas e uma compreensão da lista para colunas) e determina qual caractere para cada célula usando uma expressão da entrada (i
), valor de deslocamento da linha (a
) e índice da coluna (x
)Economizou 8 bytes simplificando a subexpressão para o deslocamento verdadeiro.
fonte
Python 2 ,
144142127 bytesExperimente online!
Definitivamente pode ser jogado ainda mais, as dicas são apreciadas :)
Golpeou 1 byte graças ao undergroundmonorail!
Joguei muitos bytes graças ao ovi e Mego porque sou um tolo que esquece de não usar 4 espaços para o codegolf :)
fonte
if i>2:y=16-y
pode ser alterado paray=[16-y,y][i>2]
, que é mais longo, mas com o uso liberal de ponto-e-vírgula permitiria que seu loop fosse de uma linha para salvar vários bytes.PHP, 105 bytes
Experimente online!
fonte
$a/4
? A indexação fará o corte. :)Mathematica, 125 bytes
Retorna uma grade usando
1
e em0
vez de.
e#
respectivamente.Ele funciona usando duas máscaras, uma circular e outra meio sombreada e combinando-as logicamente para obter as formas apropriadas.
As duas máscaras são feitas com
1-{3.4,5}~DiskMatrix~{8,16}
a circular eTable[Boole[i>8],8,{i,16}]
a metade. A lógica é a seguinte:A lógica é simulada com
1
s e0
s usando multiplicação paraAND
ex -> 1-x
paraNOT
.Uma solução de bônus (não ASCII), para 28 bytes:
IconData["MoonPhase",#/4-1]&
fonte