4
$\begingroup$

For a given length $n$ and a maximum positive integer value $N$, I'd like to generate a list that contains all $n$-vectors with entries between $-N$ and $N$ (of which there are $(2N+1)^n$. Further, the list should be sorted in such a way that first the element with all zeroes appears, then the elements with a single non-zero entry, then two non-zero entries, and so on. How the elements are ordered within a block with a specific amount of non-zero entries is unimportant.

$\endgroup$
5
  • $\begingroup$ What have you tried so far? Generally, people here appreciate if questions show a minimum level of effort on the askers part. To get you started, take a look at Range, Tuples, SortBy and Count. $\endgroup$
    – Lukas Lang
    Commented Aug 9, 2022 at 10:08
  • $\begingroup$ You surely mean $(2N+1)^n$ not $n^{2N+1}$? $\endgroup$
    – yarchik
    Commented Aug 9, 2022 at 10:10
  • $\begingroup$ @yarchik indeed, thanks, editied $\endgroup$
    – Latrace
    Commented Aug 9, 2022 at 10:12
  • $\begingroup$ @LukasLang I'm stuck in the stage of confusion. I will look at the functions you mention $\endgroup$
    – Latrace
    Commented Aug 9, 2022 at 10:14
  • $\begingroup$ Try to sort Table[IntegerDigits[i, k, n] - ConstantArray[1, n], {i, 0, k^n - 1}]. $\endgroup$
    – yarchik
    Commented Aug 9, 2022 at 10:22

1 Answer 1

3
$\begingroup$

Thanks to LukasLang:

ReverseSortBy[Tuples[Range[-nmax, nmax], n], Count[#, 0] &]

does the job. Here nmax = $N$ from the question.

$\endgroup$
1
  • 2
    $\begingroup$ This is almost exactly what I had in mind. One minor improvement: You can write Count[0] instead of Count[#, 0]& (this is the third usage form in the documentation of Count) $\endgroup$
    – Lukas Lang
    Commented Aug 9, 2022 at 10:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.