Gerar combinações de tamanho N a partir de uma lista

Crie uma função que retorne todas as combinações de tamanho n de uma coleção já ordenada. Preserve a ordem de entrada dentro de cada combinação e retorne as combinações em ordem lexicográfica crescente. Os elementos podem ser números, cadeias de caracteres ou qualquer outro tipo de elemento compatível com o código inicial fornecido.

Exemplos

combo([1, 2, 3, 4], 1) ➞ [[1], [2], [3], [4]]

combo([1, 2, 3, 4], 2) ➞ [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

combo([1, 2, 3, 4], 5) ➞ []

combo([1, 2, 3, 4], 0) ➞ [[]]

Observações

  • A ordem lexicográfica compara primeiro os primeiros elementos: [1, 2] vem antes de [2, 4]. Quando os primeiros elementos são iguais, os segundos elementos são comparados: [1, 2] vem antes de [1, 3], e assim por diante.
  • Retorne uma coleção externa vazia se n exceder o tamanho da entrada.
  • Retorne uma única combinação vazia se n for 0, pois existe exatamente uma combinação de tamanho zero.