Insegni a una classe di studenti con preferenze interessanti su come sono sistemate le loro sedie. Esistono 3 requisiti molto specifici per la disposizione delle sedie:
La maggior parte sono disposti in un rettangolo, anche se ciò significa che alcune sedie si svuotano.
Devono esserci meno sedie vuote possibili.
Devono essere il più "quadrati" possibile. Squarey-ness è determinato dalla distanza tra la larghezza e l'altezza del rettangolo, più basso è meglio. Ad esempio, un rettangolo che
4x7ha una quadratura di 3.
Per essere più specifici, il "punteggio" di una disposizione è la distanza tra la larghezza e l'altezza più il numero di sedie che andrebbero vuote.
Facciamo un esempio. Diciamo che hai 13 studenti. Puoi sistemare le sedie in uno di questi modi:
1x13
2x7
3x5
4x4
1x13non è molto quadrato. In effetti, 1 e 13 sono separati da 12, quindi diamo a questa disposizione 12 punti. Ha anche 0 sedie vuote, quindi aggiungiamo 0 punti, dando a questa disposizione un punteggio di 12. Non eccezionale.
2x7è sicuramente meglio. 2 e 7 sono solo 5 a parte, quindi diamo a questa disposizione 5 punti. Tuttavia, se effettivamente disponessi 2 file di sette sedie, ciò richiederebbe 14 sedie, il che significa che una sedia sarebbe vuota. Quindi aggiungiamo un punto, dando a questa disposizione un punteggio di 6.
Potremmo anche fare 3x5. 3 e 5 sono 2 a parte, quindi +2 punti. Ci vogliono 15 sedie, il che significa che avremmo due sedie extra, quindi altri +2 punti, per un punteggio di 4.
Ultima opzione, 4x4. 4 e 4 sono separati da 0, quindi diamo questo +0 punti. 4x4 prende 16 sedie, quindi 3 sedie vanno vuote, per un punteggio totale di 3. Questa è la soluzione ottimale.
In caso di pareggio, la soluzione ottimale è quella con meno sedie vuote.
La sfida
È necessario scrivere un programma o una funzione che accetta un numero intero e genera la disposizione ottimale delle sedie per quel numero di studenti. IO può essere in qualsiasi formato ragionevole. Ecco un esempio di output per un numero qualsiasi di studenti da 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)
Come al solito, si tratta di code-golf, quindi si applicano scappatoie standard e il vincitore è la risposta più breve in byte.