The goal is to generate a random integer between 1-16, inclusive, with a 6 sided die as your only source of randomness. The solution that seems to be staring me in the face is to roll three times and subtract 2 from the sum of the rolls. Three rolls will add to a number between 3-18; subtract 2 to get a number between 1-16, eliminating any unwanted amount over the target.
Does this seem satisfactory, and is there a better way to go about this? The original problem is from a previously used challenge in a scholarship competition for a programming seminar, so this is just for practice. The solution is meant to be a program written in Python; the method for the 6 sided die can be assumed. Original problem
If you would like the integer to be uniformly distributed in the range $1$-$16$, then as explained in the comments this will not work (essentially because the so-called binomial distribution is not uniform).
Since $16$ is a power of $2$, I have a simpler strategy to suggest: view the dice as a degenerate coin, i.e. where odd is heads (a $1$) and even is tails (a $0$). Perform $4$ coin flips: you'll get $4$ ones or zeroes, i.e. binary digits. Writing them down in order gives a binary number in the range $0$-$15$ which is uniformly distributed. Add 1 to get your desired result.