Uczysz klasę uczniów z interesującymi preferencjami dotyczącymi rozmieszczenia ich krzeseł. Istnieją 3 bardzo szczegółowe wymagania dotyczące rozmieszczenia krzeseł:
Najczęściej są ułożone w prostokąt, nawet jeśli oznacza to, że niektóre krzesła są puste.
Musi być jak najmniej pustych krzeseł.
Muszą być możliwie „kwadratowe”. Kwadratowość zależy od odległości między szerokością a wysokością prostokąta, im niższa, tym lepiej. Na przykład prostokąt, który
4x7
ma kwadratowość 3.
Mówiąc ściślej, „wynikiem” aranżacji jest odległość między szerokością a wysokością plus liczba krzeseł, które mogłyby zostać puste.
Weźmy przykład. Powiedzmy, że masz 13 uczniów. Krzesła można ustawić w dowolny z następujących sposobów:
1x13
2x7
3x5
4x4
1x13
nie jest bardzo kwadratowy. W rzeczywistości 1 i 13 dzieli się na 12, więc dajemy temu układowi 12 punktów. Ma również 0 pustych krzeseł, więc dodajemy 0 punktów, co daje wynikowi 12 punktów. Niezbyt dobrze.
2x7
jest z pewnością lepszy. 2 i 7 są tylko 5 od siebie, więc dajemy temu układowi 5 punktów. Jeśli jednak faktycznie ustawisz 2 rzędy po siedem krzeseł, zajmie to 14 krzeseł, co oznacza, że jedno krzesło będzie puste. Dodajemy więc jeden punkt, co daje temu układowi wynik 6.
Możemy też zrobić 3x5
. 3 i 5 to 2 osobno, więc +2 punkty. Zajmuje 15 krzeseł, co oznacza, że mielibyśmy dwa dodatkowe krzesła, więc kolejne +2 punkty za wynik 4.
Ostatnia opcja, 4x4
. 4 i 4 są od siebie równe 0, więc dajemy to +0 punktów. 4x4 zajmuje 16 krzeseł, więc 3 krzesła są puste, co daje łączny wynik 3. To optymalne rozwiązanie.
W przypadku remisu optymalnym rozwiązaniem jest rozwiązanie z mniej pustymi krzesłami.
Wyzwanie
Musisz napisać program lub funkcję, która przyjmuje liczbę całkowitą i wyświetla optymalne ustawienie krzeseł dla tej liczby uczniów. IO może mieć dowolny rozsądny format. Oto przykładowe wyniki dla dowolnej liczby uczniów od 1 do 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)
Jak zwykle jest to gra w golfa, więc obowiązują standardowe luki, a zwycięzca jest najkrótszą odpowiedzią w bajtach.