Zaimplementuj generator liczb pseudolosowych (N-cyfrowych) korzystając z Middle Square Method:
Niech ciastko będzie zadane przez rozmiar S (będący liczbą naturalną).
Niech dziecko będzie zdefiniowane przez łakomstwo L (będące liczbą naturalną), które definiuje minimalny rozmiar ciastka, które zadowoli dziecko (czyli dziecko przyjmie ciastko, gdy S >= L).
Mając dane N ciastek o różnych rozmiarach i M dzieci o różnych łakomstwach, zmaksymalizuj liczbę zadowolonych dzieci. Jedno dziecko może dostać co najwyżej jedno ciastko!
Przykład:
Ciastka: [1, 2, 3, 2, 2]
Dzieci: [1, 1, 4, 2, 3, 3]
Maksymalna liczba zadowolonych dzieci: 4
1 dziecko o L=4 -> brak odpowiedniego ciastka
2 dzieci o L=3 -> tylko jedno ciastko o S=3 (zostają [1, 2, 2, 2])
1 dziecko o L=2 -> zostają [1, 2, 2]
2 dzieci o L=1 -> dostają po ciastku i dwa zostają nie użyte
Niech S i L przyjmują wartości o 1 do 10
Napisz skrypt do generowania zestawów danych. Program powinien zawierać:
funkcję, która przyjmuje dwa argumenty (liczbę dzieci M i liczbę ciastek N) i zwraca losowe zestawy S i L; funkcja wywołana bez podania argumentów powinna użyć losowych wartości M i N
funkcję, która przyjmuje trzy argumenty (dwie listy/krotki i ścieżka do pliku) i dopisuje (w nowej linii) listy/krotki do pliku w formacie
C1, C2, C3, ..., CN; L1, L2, L3, ... LM
1, 3, 2, 4; 1, 1, 2, 2
8, 4, 5, 2, 4; 3, 4, 7, 8
...
Napisz moduł do rozwiązywania wyżej opisanego problemu, który zawiera:
funkcję, która przyjmuje dwa argumenty (listę ciastek i listę dzieci) i zwraca maksymalną liczbę zadowolonych dzieci
funkcję main, która testuje działanie głównej funkcji z pierwszego podpunktu na kilku przykładach
Napisz program do analizy wygenerowanych zestawów. Program powinien wczytywać dane wygenerowane skryptem z pierwszego punktu i wykorzystywać moduł napisany w drugim punkcie. Przykładowy wynik działania programu:
Ciastka: [1, 2, 3, 2, 2]
Dzieci: [1, 1, 4, 2, 3, 3]
Maksymalna liczba zadowolonych dzieci: 4
Ciastka: [1, 1, 1]
Dzieci: [2, 3, 1]
Maksymalna liczba zadowolonych dzieci: 1