Introdução:
Quando pensamos em joaninhas, geralmente pensamos em um bug vermelho ou laranja escuro com manchas pretas. Embora isso não seja necessário, como também existem pretos com joaninhas manchadas de vermelho / laranja ou joaninhas sem manchas , imaginamos principalmente joaninhas algo como esta joaninha asiática:
Outra coisa a notar é que as manchas nas joaninhas são quase sempre simétricas. E é aí que entra esse desafio.
Desafio:
Dado um número inteiro n( >= 0), produza a joaninha ASCII a seguir uma ou várias vezes, com pontos simétricos divididos igualmente entre os dois lados, bem como as duas ou mais joaninhas.
Aqui está o layout padrão da joaninha:
_V_
/(@I@)\
/ | \
| | |
\ | /
''-!-''
Se n=0, produzimos a joaninha acima como está.
Quando né maior que zero, preenchemos os espaços do bug da arte ASCII com uma minúscula oou substituímos o |no centro por uma capital O. O objetivo é fazer nalterações nas joaninhas 'vazias', enquanto ainda produz uma saída simétrica (por joaninha) e produzir o mínimo possível de joaninhas.
As saídas tão válidas para n=1são:
_V_
/(@I@)\
/ O \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| | |
\ O /
''-!-''
Mas isso seria inválido:
_V_
/(@I@)\
/ | \
| o | |
\ | /
''-!-''
As saídas válidas para n=2são:
_V_
/(@I@)\
/ O \
| O |
\ | /
''-!-''
_V_
/(@I@)\
/ O \
| | |
\ O /
''-!-''
_V_
/(@I@)\
/ o|o \
| | |
\ | /
''-!-''
_V_
/(@I@)\
/ | \
| o | o |
\ | /
''-!-''
etc. There are a lot of possible outputs.
O primeiro nque não é mais possível encaixar em uma única joaninha é n=24. Nesse caso, você terá que dividi-lo o mais uniformemente possível em duas joaninhas (você pode optar por produzi-las uma perto da outra ou uma debaixo da outra - com opcionalmente um espaço ou uma nova linha entre elas). Por exemplo:
_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/
''-!-'' ''-!-''
OU:
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
_V_
/(@I@)\
/ooo|ooo\
| | |
\ooo|ooo/
''-!-''
Regras do desafio:
nestará na faixa de0-1000.- Você pode optar por enviar para STDOUT, retornar como String ou matriz / lista de caracteres 2D, etc. Sua chamada.
- Não são permitidas novas linhas de frente ou espaços em branco desnecessários. Espaços em branco à direita e uma única linha nova à direita são permitidos.
- Como mencionado acima, quando duas ou mais joaninhas são necessárias, você pode optar por produzi-las uma perto da outra ou uma abaixo da outra (ou uma mistura de ambas ..)
- Quando duas ou mais joaninhas são impressas uma ao lado da outra, é permitido um único espaço opcional no meio. Quando duas ou mais joaninhas são impressas uma na outra, é permitida uma única nova linha opcional intermediária.
- Você pode escolher o layout das joaninhas em qualquer etapa da sequência, desde que simétricas e iguais à entrada
n. - Como o objetivo é ter
nalterações E o menor número possível de joaninhas, você começará a usar mais de uma joaninha quando estiver aciman=23. O layout dessas joaninhas não precisa ser o mesmo. De fato, isso nem é possível para algumas entradas, comon=25oun=50para citar duas. - Além disso, às vezes não é possível dividir os pontos uniformemente entre duas ou mais joaninhas. Nesse caso, você terá que dividi-los o mais uniformemente possível, com no máximo uma diferença de 1 entre eles.
Portanto n=50, mantendo as duas últimas regras em mente, essa seria uma saída possível válida (onde o primeiro bug tem 16 pontos e os outros dois têm 17):
_V_ _V_ _V_
/(@I@)\ /(@I@)\ /(@I@)\
/oooOooo\ / O \ /o oOo o\
|ooooOoooo||ooooOoooo||o ooOoo o|
\ | / \oooOooo/ \o oOo o/
''-!-'' ''-!-'' ''-!-''
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se necessário.
oe Oem vez disso. Eu mudei um pouco a redação.
n=50exemplo, eu acredito que você quer dizer o primeiro bug tem 16 pontos e os outros dois cada um tem 17.


Começamos inicializando a nova linha e o
Em seguida, lemos o número de pontos do stdin e calculamos o número de joaninhas necessárias.
Podemos então iniciar o loop externo para o conjunto de bugs, calculando o número de pontos para a próxima joaninha a ser renderizada.
Para cada joaninha, calculamos se o ponto central grande precisa ser mostrado (se
Da mesma forma, calculamos se o outro par de pontos grandes precisa ser mostrado (se
A parte final da inicialização da tabela de pesquisa é um loop que calcula quais dos pequenos pontos precisam ser exibidos. Essencialmente, o algoritmo é: se
Em seguida, colocamos a representação em cadeia codificada da joaninha na pilha. Essa é essencialmente uma string simples, mas ficou um pouco complicada quando tentei comprimir as lacunas do código para que a fonte formasse um retângulo.
Neste ponto, estamos prontos para iniciar o loop de saída, processando os caracteres um por um, convertendo os casos especiais (os pontos, quebras de linha etc.) por meio da tabela de pesquisa construída anteriormente.
Finalmente, verificamos se exibimos todas as joaninhas necessárias, caso contrário, continuamos de volta ao início do loop externo.