Biorąc pod uwagę dodatnią liczbę całkowitą k > 1
i nieujemną liczbę całkowitą i
, wygeneruj k
-tuple (lub k
-wymiarowy wektor) liczb całkowitych nieujemnych. Dla każdego k
, mapa z ℕ do ℕ k , musi być bijective . Oznacza to, że każde wejście i
powinno dawać inną krotkę, a każda możliwa krotka musi być wytworzona przez jakiś wkład i
.
Możesz napisać program lub funkcję, pobierając dane wejściowe przez STDIN (lub najbliższą alternatywę), argument wiersza poleceń lub argument funkcji i wypisując wynik przez STDOUT (lub najbliższą alternatywę), wartość zwracaną funkcji lub parametr funkcji (wyjściowej).
Możesz użyć dowolnego wygodnego, jednoznacznego, płaskiego formatu listy wyników.
Rozwiązanie powinno nakładać żadnych sztucznych limitów k
i i
ale można założyć, że pasują one do natywnej wielkości całkowitej Twojego języka. Przynajmniej musisz obsługiwać wartości 255
, ale nawet Twoja natywna liczba całkowita jest mniejsza.
Dla każdego 1 < k < 32
, Twój kod powinien produkować wynik w ciągu kilku sekund (oczywiście, jeśli odpowiedź nie obsługuje tak duże ze względu na poprzedniej reguły limit zostanie odpowiednio skorygowana). Nie powinno to stanowić problemu: możliwe jest rozwiązanie tego problemu tak, aby działało do 2 128 w ciągu kilku sekund, ale limit polega na unikaniu odpowiedzi, które faktycznie powtarzają się w celu znalezienia wyniku.i < 231
i
0
i
Podaj w odpowiedzi opis wybranego mapowania i uzasadnienie, dlaczego jest ono bijective (nie musi to być formalny dowód).
To jest kod golfowy, wygrywa najkrótsza odpowiedź (w bajtach).
q~2bW%1$Te]/zWf%2fbp
(odwrotna kolejność wprowadzania)