Enseñas a una clase de estudiantes con preferencias interesantes sobre cómo están dispuestas sus sillas. Hay 3 requisitos muy específicos que tienen para la disposición de las sillas:
La mayoría de ellos están dispuestos en un rectángulo, incluso si eso significa que algunas sillas se vacían.
Debe haber tan pocas sillas vacías como sea posible.
Deben ser tan "cuadrados" como sea posible. La cuadratura está determinada por la distancia entre el ancho y la altura del rectángulo, más bajo es mejor. Por ejemplo, un rectángulo que
4x7
tiene un cuadrado de 3.
Para ser más específicos, el "puntaje" de un arreglo es la distancia entre el ancho y la altura más el número de sillas que quedarían vacías.
Pongamos un ejemplo. Digamos que tienes 13 estudiantes. Puede organizar las sillas de cualquiera de estas formas:
1x13
2x7
3x5
4x4
1x13
No es muy cuadrado. De hecho, 1 y 13 están separados por 12, por lo que le damos a este arreglo 12 puntos. También tiene 0 sillas vacías, por lo que agregamos 0 puntos, dando a este arreglo una puntuación de 12. No es tan bueno.
2x7
Ciertamente es mejor. 2 y 7 son solo 5, por lo que le damos a este arreglo 5 puntos. Sin embargo, si realmente dispusiera 2 filas de siete sillas, se necesitarían 14 sillas, lo que significa que una silla estaría vacía. Entonces agregamos un punto, dando a este arreglo una puntuación de 6.
También podríamos hacer 3x5
. 3 y 5 son 2 separados, entonces +2 puntos. Se necesitan 15 sillas, lo que significa que tendríamos dos sillas adicionales, por lo que otros +2 puntos, para una puntuación de 4.
Última opción, 4x4
. 4 y 4 están separados por 0, por lo que le damos +0 puntos. 4x4 tiene 16 sillas, por lo que 3 sillas quedan vacías, para un puntaje total de 3. Esta es la solución óptima.
En caso de empate, la solución óptima es la que tiene menos sillas vacías.
El reto
Debe escribir un programa o función que tome un número entero y genere la disposición óptima de las sillas para ese número de estudiantes. IO puede estar en cualquier formato razonable. Aquí hay una muestra de salida para cualquier número de estudiantes de 1 a 100:
1: (1, 1)
2: (1, 2)
3: (2, 2)
4: (2, 2)
5: (2, 3)
6: (2, 3)
7: (3, 3)
8: (3, 3)
9: (3, 3)
10: (2, 5)
11: (3, 4)
12: (3, 4)
13: (4, 4)
14: (4, 4)
15: (4, 4)
16: (4, 4)
17: (3, 6)
18: (3, 6)
19: (4, 5)
20: (4, 5)
21: (3, 7)
22: (5, 5)
23: (5, 5)
24: (5, 5)
25: (5, 5)
26: (4, 7)
27: (4, 7)
28: (4, 7)
29: (5, 6)
30: (5, 6)
31: (4, 8)
32: (4, 8)
33: (6, 6)
34: (6, 6)
35: (6, 6)
36: (6, 6)
37: (5, 8)
38: (5, 8)
39: (5, 8)
40: (5, 8)
41: (6, 7)
42: (6, 7)
43: (5, 9)
44: (5, 9)
45: (5, 9)
46: (7, 7)
47: (7, 7)
48: (7, 7)
49: (7, 7)
50: (5, 10)
51: (6, 9)
52: (6, 9)
53: (6, 9)
54: (6, 9)
55: (7, 8)
56: (7, 8)
57: (6, 10)
58: (6, 10)
59: (6, 10)
60: (6, 10)
61: (8, 8)
62: (8, 8)
63: (8, 8)
64: (8, 8)
65: (6, 11)
66: (6, 11)
67: (7, 10)
68: (7, 10)
69: (7, 10)
70: (7, 10)
71: (8, 9)
72: (8, 9)
73: (7, 11)
74: (7, 11)
75: (7, 11)
76: (7, 11)
77: (7, 11)
78: (9, 9)
79: (9, 9)
80: (9, 9)
81: (9, 9)
82: (7, 12)
83: (7, 12)
84: (7, 12)
85: (8, 11)
86: (8, 11)
87: (8, 11)
88: (8, 11)
89: (9, 10)
90: (9, 10)
91: (7, 13)
92: (8, 12)
93: (8, 12)
94: (8, 12)
95: (8, 12)
96: (8, 12)
97: (10, 10)
98: (10, 10)
99: (10, 10)
100: (10, 10)
Como de costumbre, este es el código de golf, por lo que se aplican las lagunas estándar, y el ganador es la respuesta más corta en bytes.