O pequeno Chandler está triste. Desenhe uma nuvem para animá-lo.
Nota: Desenhar uma nuvem não vai animá-lo.
Um círculo pode ser definido como uma tupla de 3, (x,y,r)
onde x
é a posição x do círculo em um plano cartesiano, y
é a posição y do círculo em um plano cartesiano e r
é o raio do círculo. x
e y
pode ser negativo. r
é sempre positivo. A entrada é uma lista de círculos na forma de três tuplas separadas por espaço. Por exemplo:
3,1,1 3,2,1.5 1,2,0.7 0.9,1.2,1.2 1,0,0.8
Os 3,1,1
meios "Um círculo com ponto central 3,1
com 1 raio. 3,2,1.5
Significa" Um círculo com ponto central 3,2
com 1,5 raio.
Se desenharmos todos esses círculos da entrada em um gráfico, será assim (incluí linhas e rótulos de grade apenas para maior clareza; eles não são necessários):
Observe como todos os círculos são coesos . Ou seja, todos eles se sobrepõem, formando um grande grupo sem pequenos grupos de círculos separados do resto. A entrada é garantida para ser coesa.
Suponha que agora desenhemos uma linha que viaja ao redor da "borda" formada por esses círculos, sem nenhuma das outras linhas. Seria como desenhar a borda da silhueta formada por todos os círculos. A nuvem resultante ficaria assim:
Portanto, essa nuvem foi formada desenhando apenas os arcos dos círculos na entrada que formam uma borda, resultando em uma única forma. Em outras palavras, a nuvem é formada apenas desenhando os arcos que não estão dentro de outro círculo. Seu programa terá entrada na forma explicada acima e saída uma imagem que exibe a nuvem resultante. A forma geral da nuvem deve estar correta, mas a escala, a cor, a espessura da linha e a aparência dos vértices dependem de você. Observe que a nuvem deve estar visível; portanto, não é possível extrair algo como "Este programa desenha uma nuvem branca em fundo branco", "Este programa desenha uma nuvem em uma escala infinitesimalmente pequena", "Este programa desenha uma nuvem com 0 espessura da linha ", etc. Observe também que a cor da borda deve ser diferente da cor do preenchimento ou do plano de fundo.
Outro exemplo. Entrada:
1,4,2 5,2,1 3,1,1 3.5,2,1.2 3,3,0.7 1,2,0.7
Resultado:
Se houver um "buraco" na nuvem, você deve desenhá-lo também. Entrada:
0,5,4 3,4,4 4,3,4 5,0,4 4,-3,4 3,-4,4 0,-5,4 -3,-4,4 -4,-3,4 -5,0,4 -4,3,4 -3,4,4
Resultado:
Aqui está uma regra importante: seu programa deve desenhar apenas as linhas que formam a borda. Isso significa que você NÃO PODE simplesmente desenhar os círculos completamente e, em seguida, desenhar os círculos um pouco menores com um preenchimento branco - porque esse método ainda desenha linhas que não formam uma borda, apenas as cobre posteriormente. O objetivo da regra era impedir as implementações "desenhe os círculos e desenhe os círculos novamente com um preenchimento branco", ou qualquer coisa semelhante a isso. Espera-se que a resposta realmente calcule onde desenhar as coisas antes de desenhá-las.
Isso é código de golfe, portanto, a menor contagem de caracteres vence.