Desafío
Dada la fase de la luna, dibuje usando el arte ASCII.
Su programa debe manejar luna nueva, luna creciente, primer trimestre, gibosa creciente, luna llena, gibosa menguante, último cuarto y media luna menguante. Su entrada será un número entero.
0 -> new moon
1 -> waxing crescent
2 -> first quarter
3 -> waxing gibbous
4 -> full moon
5 -> waning gibbous
6 -> last quarter
7 -> waning crescent
El arte ASCII se coloca en una cuadrícula de 16x8 (debido a las proporciones de dimensión de caracteres). Puede reemplazar .
con cualquier carácter y #
con cualquier otro carácter que no sea un espacio en blanco.
La salida para luna nueva debe ser:
................
................
................
................
................
................
................
................
Para la depilación creciente:
..........######
............####
.............###
.............###
.............###
.............###
............####
..........######
Para el primer trimestre:
........########
........########
........########
........########
........########
........########
........########
........########
Para la depilación gibosa:
......##########
....############
...#############
...#############
...#############
...#############
....############
......##########
Y para luna llena:
################
################
################
################
################
################
################
################
La media luna menguante es solo la media luna creciente con cada línea invertida, como con la gibosa menguante y la gibosa creciente, y el primer y último cuarto.
Reglas
- Se aplican lagunas estándar
- Si lo desea, puede optar por aumentar / disminuir en la dirección opuesta, aunque no debería hacer ninguna diferencia (los gráficos que se muestran en esta pregunta son para el hemisferio norte)
- Su salida debe ser exactamente como se especifica. Sus líneas nuevas pueden ser cualquier separador de línea razonable, y puede tener una línea nueva posterior si lo desea.
MoonPhase["Icon"]
son 17 bytes en Mathematica ...Respuestas:
Jalea ,
4332 bytes-7 bytes pasando de máscara de bits a máscara de comparación
-2 bytes con algunas mejoras de programación tácitas
-1 byte moviéndose al hemisferio sur
-1 byte - use el nuevo
ɓ
separador de cadena ... ¡su primer uso!Utiliza los caracteres
0
para.
y1
para#
.Todos los casos en un conjunto de pruebas en Pruébelo en línea.
¿Cómo?
Crea una máscara que captura las primeras cuatro fases y, en lugar de invertir las líneas, complementa los valores resultantes del resultado de la fase módulo 4 cuando la fase div-4 no es cero.
Originalmente construido una máscara de bits, pero los valores de máscara eran
0
,8
,12
, y14
-0000
,1000
,1100
, y1110
- estos tienenphase
que llevan la delantera - lo que una comparación máscara podría ser utilizado en su lugar.fuente
JavaScript (ES6),
121...10392 bytesManifestación
Mostrar fragmento de código
fuente
Haskell ,
9890 bytesRecorre las filas y columnas usando la mónada de la lista (un
do
bloque para las filas y una comprensión de la lista para las columnas) y determina qué carácter para cada celda usando una expresión de la entrada (i
), el valor de desplazamiento para la fila (a
) y el índice de la columna (x
)Ahorró 8 bytes al simplificar la subexpresión para el desplazamiento verdadero
fuente
Python 2 ,
144142127 bytesPruébalo en línea!
Definitivamente se puede jugar más golf, se agradecen los consejos :)
Golfed 1 byte gracias al metro subterráneo!
Golfé muchos bytes gracias a Ovi y Mego porque soy un tonto que se olvida de no usar 4 espacios para codegolf :)
fuente
if i>2:y=16-y
podría cambiarse ay=[16-y,y][i>2]
, que es más largo, pero con el uso liberal de punto y coma permitiría que su bucle sea de una sola línea para guardar varios bytes.PHP, 105 bytes
Pruébalo en línea!
fuente
$a/4
? La indexación hará el corte. :)Mathematica, 125 bytes
Devuelve una cuadrícula usando
1
y en0
lugar de.
y#
respectivamente.Funciona usando dos máscaras, una circular y una media sombra, y combinándolas lógicamente para obtener las formas apropiadas.
Las dos máscaras están hechas
1-{3.4,5}~DiskMatrix~{8,16}
para la circular yTable[Boole[i>8],8,{i,16}]
para la media. La logica es como sigue:La lógica se simula con
1
sy0
s mediante el uso de la multiplicación porAND
yx -> 1-x
paraNOT
.Una solución extra (no ASCII), para 28 bytes:
IconData["MoonPhase",#/4-1]&
fuente