Przegląd
W tym wyzwaniu Twoim zadaniem jest losowe wygenerowanie monotonicznej funkcji matematycznej między dwoma zestawami.
Wejście
Twoje dane wejściowe to dwie dodatnie liczby całkowite si n.
Po uzyskaniu tych danych wejściowych program wygeneruje losową funkcję matematyczną fz zestawu do . Innymi słowy, jest to „zasada”, który odbywa się w -tuple liczb całkowitych między a i zwraca jeden taki całkowitych. Ponadto powinien być monotoniczny w następującym znaczeniu. Jeśli i są dwie pary, takie, które obowiązują dla każdej współrzędnej , to .{0,1,...,s-1}n{0,1,...,s-1}fn0s-1fABnA[i] ≥ B[i]if(A) ≥ f(B)
Dokładny rozkład funkcji monotonicznych fnie ma znaczenia, o ile każda taka funkcja ma dodatnie prawdopodobieństwo wygenerowania (przy założeniu idealnego RNG).
Wynik
Twój wynik powinien być wyliczeniem danych wejściowych i wyjściowych f. Powinien zawierać wszystkie nliczby całkowite między 0iw s-1jakiejś kolejności, po których każdemu następują odpowiednie dane wyjściowe z f. Dokładny format wyjściowy jest elastyczny (w granicach rozsądku).
Przykłady
Dane wejściowe s = 3i n = 2mogą generować dane wyjściowe
(0, 0) 0
(0, 1) 1
(0, 2) 2
(1, 0) 0
(1, 1) 1
(1, 2) 2
(2, 0) 1
(2, 1) 1
(2, 2) 2
Zawiera wszystkie pary w zestawie {0, 1, 2}dokładnie raz, a po każdej z nich znajduje się jej f-value. Warunek monotoniczności jest również spełniony. Krotki podano tutaj w kolejności leksykograficznej, ale nie jest to konieczne.
Jako kolejny przykład s = 2i n = 4może produkować
(0, 0, 0, 0) 0
(0, 0, 0, 1) 0
(0, 0, 1, 0) 0
(0, 0, 1, 1) 0
(0, 1, 0, 0) 1
(0, 1, 0, 1) 1
(0, 1, 1, 0) 1
(0, 1, 1, 1) 1
(1, 0, 0, 0) 0
(1, 0, 0, 1) 1
(1, 0, 1, 0) 0
(1, 0, 1, 1) 1
(1, 1, 0, 0) 1
(1, 1, 0, 1) 1
(1, 1, 1, 0) 1
(1, 1, 1, 1) 1
Poniżej przedstawiono wszystkie możliwe dane wyjściowe dla s = 2i n = 2(aż do zmiany kolejności krotek); twój program powinien losowo wypisać jeden z nich:
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 0
-------
(0,0) 0
(0,1) 0
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 0
(1,0) 1
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 0
(1,1) 1
-------
(0,0) 0
(0,1) 1
(1,0) 1
(1,1) 1
-------
(0,0) 1
(0,1) 1
(1,0) 1
(1,1) 1
Zasady i punktacja
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone. Preferowany jest kod z wyjaśnieniem.
Nie ma ograniczeń dotyczących złożoności czasu, ale dam premię w wysokości -15%, jeśli Twoje rozwiązanie zawsze gwarantuje ukończenie w określonym czasie (w zależności od nakładów i przy założeniu idealnego RNG działającego w stałym czasie) .