Su tarea es escribir un programa que encuentre el radio más grande que puedan tener N círculos y que aún quepa dentro de un rectángulo que es X por Y píxeles grandes. (similar a este artículo de Wikipedia ) Su programa debe encontrar el radio más grande posible y la posición óptima de estos N círculos para que
- No hay dos círculos superpuestos
- Todos los círculos caben dentro del rectángulo.
Su programa debería imprimir esto en la consola:
Highest possible radius: <some_number>
Circle 1 Focus: (x, y)
Circle 2 Focus: (x, y)
...
Circle N-1 Focus: (x, y)
Circle N Focus: (x, y)
(Obviamente, debe reemplazar some_number con el radio que calcula su programa, N con el número de círculos que termina utilizando, y x e y con las coordenadas reales del círculo)
Por último, debe crear y guardar una imagen con estos círculos dibujados.
Reglas:
Este programa debe ejecutarse con cualquier tamaño de rectángulo y cualquier número de círculos y aún así obtener una respuesta válida. Puede usar argumentos de línea de comando, entrada del usuario, variables codificadas o cualquier otra cosa que desee.
Si algún círculo se superpone o no cabe completamente dentro del cuadro, su envío no es válido.
Cada círculo debe tener el mismo radio.
Solo para hacer esto razonable y factible, todos los números deben ser precisos al segundo decimal.
Este es el código de golf, por lo que gana el programa más corto (a partir del 28/10/2014).
Respuestas:
JavaScript
782725 caracteresprimer post, se gentil!
El programa ahora se llama a través de la función envuelta. Por ejemplo:
(function(e,f,g){...})(100,200,10)
.Prueba 1
(function(e,f,g){...})(200,200,4)
Obviamente, esperaríamos que el radio fuera exactamente 50, pero por las razones discutidas en los comentarios de la pregunta, no pude hacerlo razonablemente. El SVG se ve así ...
Prueba 2
(function(e,f,g){...})(100,400,14)
Y el SVG se ve así ...
Prueba 3
(function(e,f,g){...})(400,400,3)
Y el SVG se ve así ...
No todos son bonitos.
Cómo funciona
Código sin golf a continuación. Este programa tiene dos supuestos:
El programa comienza calculando un radio grande basado en las dimensiones de la caja. Luego trata de encajar un círculo en la esquina de la caja. Si ese círculo encaja, extiende una línea de diámetro desde ese círculo e intenta crear un círculo al final de la línea. Si el nuevo círculo encaja, se extenderá otra línea desde el nuevo círculo. Si no encaja, la línea oscilará 360 grados, buscando espacios abiertos. Si el cuadro se llena antes de que se cree el número deseado de círculos, el radio se reduce y todo comienza de nuevo.
Código sin Golf (fragmento)
fuente