Você ensina uma classe de alunos com preferências interessantes sobre como as cadeiras são organizadas. Existem três requisitos muito específicos para a organização das cadeiras:
A maioria deles é organizada em um retângulo, mesmo que isso signifique que algumas cadeiras ficam vazias.
Deve haver o mínimo de cadeiras vazias possível.
Eles devem ser o mais "quadrado" possível. A quadratura é determinada pela distância entre a largura e a altura do retângulo, quanto menor, melhor. Por exemplo, um retângulo
4x7
com um quadrado de 3.
Para ser mais específico, a "pontuação" de um arranjo é a distância entre a largura e a altura, mais o número de cadeiras que ficariam vazias.
Vamos dar um exemplo. Digamos que você tenha 13 alunos. Você pode organizar as cadeiras de qualquer uma das seguintes maneiras:
1x13
2x7
3x5
4x4
1x13
não é muito quadrado. De fato, 1 e 13 são 12 separados, então damos a esse arranjo 12 pontos. Ele também tem 0 cadeiras vazias, então adicionamos 0 pontos, dando a esse arranjo uma pontuação de 12. Não é tão bom assim.
2x7
é certamente melhor. 2 e 7 são separados apenas por 5, por isso damos 5 pontos a esse arranjo. No entanto, se você realmente organizasse duas fileiras de sete cadeiras, seriam 14 cadeiras, o que significa que uma cadeira estaria vazia. Então, adicionamos um ponto, atribuindo a esse arranjo uma pontuação de 6.
Nós também poderíamos fazer 3x5
. 3 e 5 são 2 separados, então +2 pontos. São necessárias 15 cadeiras, o que significa que teríamos duas cadeiras extras, mais outros 2 pontos, para uma pontuação de 4.
Última opção 4x4
. 4 e 4 são 0 separados, portanto, atribuímos +0 pontos. O 4x4 ocupa 16 cadeiras, portanto, 3 cadeiras ficam vazias, obtendo uma pontuação total de 3. Essa é a solução ideal.
Em caso de empate, a solução ideal é aquela com menos cadeiras vazias.
O desafio
Você deve escrever um programa ou função que use um número inteiro e produza o arranjo ideal de cadeiras para esse número de alunos. O IO pode estar em qualquer formato razoável. Aqui está um exemplo de saída para qualquer número de alunos 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 costume, isso é código-golfe, então as brechas padrão se aplicam e o vencedor é a resposta mais curta em bytes.