I agree with the given answers that (a) for your specific use case a d6 works and (b) a deck of cards works way better for these kinds of issues. This answer is intended to dig into the mathematical theory behind (a) a bit more. I'm specifically limiting the possible solutions in this answer to dice - cards are already a finalized and given answer.
You mention that you don't want to dynamically map values to symbols, but that is an issue of preparation rather than finding the correct answer. You could prepare a die for every possible combination that you expect to roll, or you could instead choose to do this on the fly when a situation arises. There is no way for you to have a pre-mapped solution with relevant symbols in a game where the set of possible situations is unwieldly large.
How large? That depends on how much preparation you're willing to put in. To use the extreme cases, DnD has such a wide variation on specific rolls that it makes a lot more sense to be able to map numbers on the fly based on a limited set of dice types, and maybe keep a mapping list around if there are commonly reoccurring scenarios.
Regardless of whether you can prepare this all in advance or not, in either case you're going to need to figure out what die would work best for your situation, which is what this answer is trying to shed a light on.
Mathematically, what you're looking for here is the least common multiple based on all collection sized for which you want to roll. In your case, you're looking to roll fairly between a set of 3 selections, and between a set of 2 selections. The least common multiple of 2 and 3 is 6. Essentially, 6 is the lowest number that is divisible by both 2 and 3, that is what's being expressed here.
Note that for your use case of rolling fairly, it does not have to be the least common multiple, any of its multiples would do. You could roll a d6, d12, d18, ... any d[k*6]
would work.
There's an additional consideration here. The numbers which you are rolling are adjacent, because you're excluding prior choices. There are integer sequences here which can help:
- If you are always going to do two rolls (i.e. roll between
n
choices and then n-1
choices), the oblong numbers are exactly that).
- If you want to be able to exhaust the list of
n
options (all the way down to picking the last item), that a factorial number.
In either case, find the number that matches your expectations, and then use a die that has either that exact number of faces or a multiple of it.
It is also possible to break that number into factors. E.g. if your target number is 42 (roll between 7, then roll between 6 options), you could theoretically roll a d3 and a d14, since each individual combination of d3+d14 rolls maps uniquely to 1 of 42 possible outcomes.