Lubię czytać tę stronę; to jest moje pierwsze pytanie. Zmiany są mile widziane.
Biorąc pod uwagę dodatnie liczby całkowite n i m , oblicz wszystkie uporządkowane partycje m na dokładnie n części dodatnich liczb całkowitych i wydrukuj je rozdzielone przecinkami i znakami nowej linii. Każda kolejność jest w porządku, ale każda partycja musi pojawić się dokładnie raz.
Na przykład, biorąc pod uwagę m = 6 i n = 2, możliwe partycje są parami liczb całkowitych dodatnich, które sumują się do 6:
1,5
2,4
3,3
4,2
5,1
Zauważ, że [1,5] i [5,1] to różne uporządkowane partycje. Dane wyjściowe powinny być dokładnie w powyższym formacie, z opcjonalnym końcowym znakiem nowej linii. (EDYCJA: Dokładna kolejność partycji nie ma znaczenia). Wejścia / wyjścia są realizowane przez standardowe we / wy Code-golf .
Kolejny przykładowy wynik dla m = 7, n = 3:
1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1
Najmniejszy kod w bajtach po 1 tygodniu wygrywa.
Ponownie edytuj w razie potrzeby.
Uzupełnienie:
@ TimmyD zapytał, jaki rozmiar liczby całkowitej jest obsługiwany przez program. Nie ma twardego minimum poza przykładami; w rzeczywistości rozmiar wyjściowy rośnie wykładniczo, z grubsza modelowany przez: linie = e ^ (0,6282 n - 1,8273).
n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432
Odpowiedzi:
Pyth, 14 bajtów
Wypróbuj online: pakiet demonstracyjny lub testowy
Wyjaśnienie:
źródło
jjL\,fqsTQ^SQE
.Python 3, 77 bajtów
Funkcja rekurencyjna, która buduje każdy ciąg wyjściowy i drukuje go. Próbuje każdej możliwej pierwszej liczby, powtarzając w dół, aby znaleźć rozwiązanie z odpowiednią zmniejszoną sumą
n
i jednym mniejszym sumowaniemm
prefiksem łańcuchas
o tej liczbie. Jeśli zarówno wymagana suma, jak i liczba wyrażeń są równe 0, trafiliśmy w znak, więc wypisujemy wynik, odcinając początkowy przecinek. Jest to sprawdzane jakom|n
0 (Falsey).79 znaków w Pythonie 2:
źródło
CJam, 22 bajty
Wypróbuj online w interpretatorze CJam .
Jak to działa
źródło
Pyth,
2018 bajtów-2 bajty @Dennis!
Pobiera to
n
jako pierwszy wiersz danych wejściowych im
jako drugi.Wypróbuj tutaj .
źródło
Haskell, 68 bajtów
Przykład użycia:
Jak to działa:
sequence $ replicate n list
tworzy wszystkie kombinacjen
elementów rysowanych w formielist
. Bierzemy wszystkie takie,x
w[1..m]
którychsum
równa sięm
.unlines
iinit$tail$show
wygeneruj wymagany format wyjściowy.źródło
Dyalog APL , 33 bajty
Przyjmuje
m
jako lewy argumentn
jako prawy argument.Prawie połowa (między
{
i⍺
) dotyczy wymaganego formatowania.źródło
Mathematica, 65 bajtów
IntegerPartitions
wykonuje zadanie. Reszta to po prostu zamówić krotki i sformatować wynik.źródło
Python 3, 112
Od jakiegoś czasu nie zarządzałem 1 linijką. :)
źródło
Python 2.7,
174170152 bajtówGruba odpowiedź. Przynajmniej jest czytelny :)
źródło
>
, poreplace
i po przecinku.Julia, 105 bajtów
Jest to funkcja, która odczytuje dwa argumenty liczb całkowitych i zapisuje wyniki do STDOUT z pojedynczym wierszem końcowym.
Nie golfowany:
źródło
Perl 6 , 54 bajtów
Jeśli wynikiem może być lista list
W obecnym brzmieniu muszę dodać znak
join
lambda.źródło