Dê uma olhada nesta imagem. Especificamente, como os orifícios nas extremidades são organizados.
( Fonte da imagem )
Observe como os tubos nesta imagem são compactados em um padrão hexagonal. Sabe-se que em 2D, uma rede hexagonal é o empacotamento mais denso de círculos. Neste desafio, estaremos focados em minimizar o perímetro de uma embalagem de círculos. Uma maneira útil de visualizar o perímetro é imaginar colocar um elástico ao redor da coleção de círculos.
A tarefa
Dado um número inteiro positivo n
como entrada, mostre uma coleção de n
círculos compactados o mais firmemente possível.
Regras e esclarecimentos
- Suponha que os círculos tenham um diâmetro de 1 unidade.
- A variável a ser minimizada é o comprimento do perímetro, definido como o casco convexo dos centros dos círculos no grupo. Veja esta imagem:
Os três círculos em uma linha reta têm um perímetro de 4 (o casco convexo é um retângulo 2x0 e o 2 é contado duas vezes), aqueles dispostos em um ângulo de 120 graus têm um perímetro de cerca de 3,85 e o triângulo tem um perímetro de apenas 3 unidades. Observe que estou ignorando as unidades pi adicionais que o perímetro real seria porque estou apenas olhando para os centros dos círculos, não para as bordas.
- Pode (e quase certamente haverá) várias soluções para qualquer dado
n
. Você pode emitir qualquer uma dessas opções a seu critério. Orientação não importa. - Os círculos devem estar em uma estrutura hexagonal.
- Os círculos devem ter pelo menos 10 pixels de diâmetro e podem ser preenchidos ou não.
- Você pode escrever um programa ou uma função.
- A entrada pode ser obtida através do STDIN, como argumento de função ou equivalente mais próximo.
- A saída pode ser exibida ou em um arquivo.
Exemplos
Abaixo, tenho exemplos de saídas válidas e inválidas para n de 1 a 10 (exemplos válidos apenas para os cinco primeiros). Os exemplos válidos estão à esquerda; todo exemplo à direita tem um perímetro maior que o exemplo válido correspondente.
Muito obrigado a steveverrill pela ajuda na elaboração deste desafio. Embalagem feliz!