Vous enseignez à une classe d'élèves ayant des préférences intéressantes quant à la disposition de leurs chaises. Il y a 3 exigences très spécifiques pour la disposition des chaises:
La plupart sont disposées dans un rectangle, même si cela signifie que certaines chaises sont vides.
Il doit y avoir aussi peu de chaises vides que possible.
Ils doivent être aussi "carrés" que possible. La carréité est déterminée par la distance entre la largeur et la hauteur du rectangle, plus c'est bas, mieux c'est. Par exemple, un rectangle qui
4x7a un carré de 3.
Pour être plus précis, le «score» d'un arrangement est la distance entre la largeur et la hauteur plus le nombre de chaises qui se videraient.
Prenons un exemple. Disons que vous avez 13 étudiants. Vous pouvez organiser les chaises de l'une des manières suivantes:
1x13
2x7
3x5
4x4
1x13n'est pas très carré. En fait, 1 et 13 sont séparés de 12, nous donnons donc à cet arrangement 12 points. Il a également 0 chaises vides, nous ajoutons donc 0 points, ce qui donne à cet arrangement un score de 12. Pas terrible.
2x7c'est certainement mieux. 2 et 7 ne sont séparés que par 5, nous accordons donc 5 points à cet arrangement. Cependant, si vous disposiez réellement 2 rangées de sept chaises, cela prendrait 14 chaises, ce qui signifie qu'une chaise serait vide. Nous ajoutons donc un point, donnant à cet arrangement un score de 6.
On pourrait aussi faire 3x5. 3 et 5 sont à 2, donc +2 points. Cela prend 15 chaises, ce qui signifie que nous aurions deux chaises supplémentaires, donc encore +2 points, pour un score de 4.
La dernière option, 4x4. 4 et 4 sont 0 à part, donc nous donnons ce +0 points. 4x4 prend 16 chaises, donc 3 chaises sont vides, pour un score total de 3. C'est la solution optimale.
En cas d'égalité, la solution optimale est celle avec moins de chaises vides.
Le défi
Vous devez écrire un programme ou une fonction qui prend un nombre entier et génère la disposition optimale des chaises pour ce nombre d'élèves. IO peut être dans n'importe quel format raisonnable. Voici un exemple de sortie pour n'importe quel nombre d'élèves de 1 à 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)
Comme d'habitude, il s'agit de code-golf, donc les échappatoires standard s'appliquent, et le gagnant est la réponse la plus courte en octets.