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 nes 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 ncambios 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=1son:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Pero esto sería inválido:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
Las salidas válidas para n=2son:
_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 nque 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:
nestará 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
ncambios 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=25on=50para 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.
oy en su Olugar. He cambiado un poco la redacción.
n=50ejemplo, creo que quieres decir que el primer error tiene 16 puntos y los otros dos tienen 17.


Comenzamos inicializando la nueva línea y el
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
Del mismo modo, calculamos si es necesario mostrar el otro par de puntos grandes (si
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
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.