Introducción:
Cuando pensamos en Ladybugs, generalmente pensamos en un insecto rojo o naranja oscuro con manchas negras. Aunque esto no es necesariamente cierto, ya que también hay mariquitas negras con manchas rojas / anaranjadas , o mariquitas sin manchas , principalmente nos imaginamos mariquitas algo así como esta mariquita asiática:
Otra cosa a tener en cuenta es que las manchas en las mariquitas son casi siempre simétricas. Y ahí es donde entra este desafío.
Reto:
Dado un entero n
( >= 0
), genera la siguiente mariquita ASCII-art una o varias veces, con puntos simétricos divididos equitativamente entre los dos lados, así como las dos o más mariquitas.
Aquí está el diseño predeterminado de la mariquita:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Si n=0
, sacamos la mariquita arriba como está
Cuando n
es mayor que cero, rellenamos los espacios del error ASCII-art con minúsculas o
, o reemplazamos el |
del centro con una mayúscula O
. El objetivo es realizar n
cambios en la (s) mariquita (s) 'vacía', sin dejar de producir una salida simétrica (por mariquita) y generar la menor cantidad posible de mariquitas.
Las salidas válidas para n=1
son:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Pero esto sería inválido:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Las salidas válidas para n=2
son:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
Lo primero n
que ya no es posible caber en una sola mariquita es n=24
. En ese caso, tendrá que dividirlo de la manera más uniforme posible en dos mariquitas (puede elegir si se mostrarán una al lado de la otra, o una debajo de la otra, con un espacio opcional o una nueva línea entre ellas). Por ejemplo:
_V_ _V_
/(@I@)\ /(@I@)\
/o o|o o\ /o o|o o\
|o o | o o||o o | o o|
\o o|o o/ \o o|o o/
''-!-'' ''-!-''
O:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Reglas de desafío:
n
estará en el rango de0-1000
.- Puede elegir enviar a STDOUT, regresar como String o 2D-char array / list, etc. Su llamada.
- No se permiten líneas nuevas o espacios en blanco innecesarios. Se permiten espacios en blanco al final y una nueva línea al final.
- Como se mencionó anteriormente, cuando son necesarias dos o más mariquitas, puede elegir si las enviará una al lado de la otra o una debajo de la otra (o una combinación de ambas ...)
- Cuando se imprimen dos o más mariquitas una al lado de la otra, se permite un solo espacio opcional en el medio. Cuando dos o más mariquitas se imprimen entre sí, se permite una nueva línea opcional en el medio.
- Puede elegir el diseño de las mariquitas en cualquier paso durante la secuencia, siempre que sean simétricas e iguales a la entrada
n
. - Dado que el objetivo es tener
n
cambios Y la menor cantidad de mariquitas posible, comenzará a usar más de una mariquita cuando esté arriban=23
. El diseño de estas mariquitas no necesariamente tiene que ser el mismo. De hecho, esto ni siquiera es posible para algunas entradas, comon=25
on=50
para nombrar dos. - Además, a veces no es posible dividir equitativamente los puntos entre dos o más mariquitas. En ese caso, tendrá que dividirlos de la manera más uniforme posible, con una diferencia de 1 como máximo entre ellos.
Entonces n=50
, teniendo en cuenta las dos últimas reglas, esta sería una salida posible válida (donde el primer error tiene 16 puntos y los otros dos tienen 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de código de golf lo desalienten de publicar respuestas con idiomas que no sean de codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
o
y en suO
lugar. He cambiado un poco la redacción.n=50
ejemplo, creo que quieres decir que el primer error tiene 16 puntos y los otros dos tienen 17.Respuestas:
Carbón ,
8481 bytesPruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Ingrese el número total de puntos.
Calcule la cantidad de mariquitas necesarias.
Pase sobre cada mariquita.
Calcule el número de puntos para poner en esta mariquita.
Imprime la cabeza y el ala derecha de la mariquita.
Si hay más de 21 puntos, imprima dos puntos, de lo contrario imprima el reverso.
Si el número de puntos es impar, imprima otro punto; de lo contrario, imprima el resto del reverso.
Divida el número de puntos por dos, y distribúyalos entre tres filas de 3, 4 y 3 puntos.
Ir al inicio de la próxima mariquita.
Refleja el lienzo a la izquierda, manteniendo la espalda.
fuente
Python 2 ,
252249238212211213209 bytesPruébalo en línea!
fuente
.replace('A','|O'[b%2])
y usarc=" _V_\n /(@I@)\ \n /361"+'|O'[b%2]+"163\ \n|4087B7804|\n \\529B925/\n ''-!-''"
en su lugar?[' o','|O'][i>9]
en' |oO'[i>9::2]
y usando|
en lugar de lógica o. También recurriendofor i in range(11)
a unaexec
declaración guardada 4 bytes.for
bucle, eliminando también una variable innecesaria.JavaScript (ES6),
183186 bytesUtiliza la misma fórmula que la respuesta de TFeld para dividir las manchas entre las mariquitas.
Manifestación
Mostrar fragmento de código
fuente
Befunge,
292279 bytesPruébalo en línea!
Explicación
El arte ASCII para la mariquita está codificado en una sola cadena Befunge, compensada por 15, para permitir que los primeros 15 caracteres imprimibles se reserven para fines especiales. Los primeros dos de estos caracteres especiales representan la nueva línea y el
|
carácter, que de lo contrario no serían imprimibles. El tercero no se usa, porque es un"
, que no se puede usar en una cadena. Los dos siguientes representan los puntos grandes en el centro. Y los diez restantes son para las manchas en las alas.Estos caracteres especiales se traducen a su forma final a través de una tabla de búsqueda, que se escribe sobre la primera parte de la primera línea.
Para que sea más fácil de explicar, este es el código con las diversas partes componentes resaltadas:
Comenzamos inicializando la nueva línea y el
|
carácter en la tabla de búsqueda, ya que estos son constantes.A continuación, leemos la cantidad de puntos de stdin y calculamos la cantidad de mariquitas requeridas.
Entonces podemos comenzar el bucle externo para el conjunto de errores, calculando el número de puntos para que se represente la próxima mariquita.
Para cada mariquita, calculamos si es necesario mostrar el punto central grande (si
spots%2 == 1
), y escribimos el valor apropiado en la tabla de búsqueda.Del mismo modo, calculamos si es necesario mostrar el otro par de puntos grandes (si
spots/2 > 10
), actualizando nuevamente la tabla de búsqueda. También calculamos los puntos restantes requeridos en cada ala.La parte final de la inicialización de la tabla de búsqueda es un ciclo que calcula cuáles de los pequeños puntos deben mostrarse. Esencialmente, el algoritmo es: si
(spotnum*spotcount+4)%10 > ((spotnum+1)*spotcount+4)%10
, entonces el punto debe mostrarse.A continuación, empujamos la representación de cadena codificada de la mariquita en la pila. Esto es esencialmente una simple cadena, pero se volvió un poco enrevesado cuando traté de meterlo en los huecos del código para que la fuente formara un rectángulo.
En este punto, estamos listos para comenzar el ciclo de salida, procesando los caracteres uno por uno, convirtiendo los casos especiales (puntos, saltos de línea, etc.) a través de la tabla de búsqueda previamente construida.
Finalmente, verificamos si hemos mostrado todas las mariquitas requeridas, de lo contrario, continuamos hasta el inicio del bucle externo.
fuente
Rubí ,
203193190 bytesPruébalo en línea!
fuente
{|m|m.
puede ser reemplazado con{$&.
;b=(n-1)/23+1
puede ser reemplazado conb=1+~-n/23
; yx=[z=d>21,d%2>0,z]⏎s.gsub!(?x){x.pop ? ?O:?|}
puede ser reemplazado porx=[d%2,d<=>21]*2⏎s.gsub!(?x){"|O|"[x.pop]}
.%q{XY}
lugar de'X'+"Y"
en las primeras ocho líneas y un par más haciendo end=n>0?n/(b=1+~-n/23):b=0
lugar den>0?d=n/(b=(n-1)/23+1):d=b=0
.