Elenca tutte le combinazioni con sostituzione (o combinazioni con ripetizione) di dimensione k da un set di n elementi.
Una combinazione con la sostituzione è un multiset non ordinato che ogni elemento in esso contenuto è anche nell'insieme di n elementi. Nota che:
- Non è ordinato. Quindi un set precedentemente stampato con un ordine diverso non dovrebbe essere stampato di nuovo.
- È un multiset. Lo stesso elemento può (ma non è richiesto) apparire più di una volta. Questa è l'unica differenza tra una combinazione con sostituzione e una combinazione normale.
- Il set dovrebbe avere esattamente k elementi.
In alternativa, è anche un sottoinsieme di dimensioni k del multiset che contiene ciascuno degli n elementi k volte.
L'input dovrebbe essere n e k , dove gli elementi sono i primi n numeri interi positivi o non negativi, oppure gli elementi n e k , dove si può presumere che gli elementi n siano tutti diversi l'uno dall'altro.
L'output dovrebbe essere un elenco di tutte le combinazioni con sostituzione con dimensione k dal set specificato. Puoi stamparli e gli elementi in ognuno di essi in qualsiasi ordine.
Non è possibile utilizzare i builtin che generano combinazioni con sostituzione. Ma puoi usare i builtin per generare normali combinazioni, permutazioni, tuple, ecc.
Questo è code-golf, vince il codice più corto.
Esempio
Input: 4 2
Output: [0 0] [0 1] [0 2] [0 3] [1 1] [1 2] [1 3] [2 2] [2 3] [3 3]