Dai un'occhiata a questa immagine. In particolare, come sono disposti i fori alle estremità.
( Fonte immagine )
Notare come i tubi in questa immagine sono imballati in un modello esagonale. È noto che in 2D un reticolo esagonale è il più denso impaccamento di cerchi. In questa sfida, ci concentreremo sulla riduzione al minimo del perimetro di un impacco di cerchi. Un modo utile per visualizzare il perimetro è immaginare di mettere un elastico attorno alla collezione di cerchi.
L'obiettivo
Dato un numero intero positivo n
come input, mostra una raccolta di n
cerchi pieni il più strettamente possibile.
Regole e chiarimenti
- Supponiamo che i cerchi abbiano un diametro di 1 unità.
- La variabile da minimizzare è la lunghezza del perimetro, che è definito come lo scafo convesso dei centri dei cerchi nel gruppo. Dai un'occhiata a questa immagine:
I tre cerchi in linea retta hanno un perimetro di 4 (lo scafo convesso è un rettangolo 2x0 e il 2 è contato due volte), quelli disposti in un angolo di 120 gradi hanno un perimetro di circa 3,85 e il triangolo ha un perimetro di sole 3 unità. Nota che sto ignorando le unità pi aggiuntive che il perimetro reale sarebbe perché sto solo guardando i centri dei cerchi, non i loro bordi.
- Ci possono essere (e quasi sicuramente ci saranno) più soluzioni per ogni dato
n
. È possibile produrre uno di questi a propria discrezione. L'orientamento non ha importanza. - I cerchi devono essere su un reticolo esagonale.
- I cerchi devono avere un diametro di almeno 10 pixel e possono essere riempiti o meno.
- È possibile scrivere un programma o una funzione.
- L'input può essere preso tramite STDIN, come argomento di funzione o equivalente più vicino.
- L'output può essere visualizzato o output in un file.
Esempi
Di seguito ho esempi di output validi e non validi per n da 1 a 10 (esempi validi solo per i primi cinque). Gli esempi validi sono a sinistra; ogni esempio a destra ha un perimetro maggiore del corrispondente esempio valido.
Mille grazie a steveverrill per l'aiuto nella stesura di questa sfida. Imballaggio felice!