<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hmm, interesting. Feels like a bug causing 13-15 to appear three times as often. Can we see the code?<div><br></div><div>I would pad the number of characters in the set up to the next power of 2 (for 26 characters, that's 32, or 5 bits). Then take each 5 bits, convert to index in set, and throw away indexes greater than your set size. That's lossy, but it's random so it doesn't matter(?), and should ensure that the rest of the characters are equally distributed.</div><div><br></div><div>Chris</div><div><br></div><div><div><div><div>On 11 Jun 2012, at 13:56, James Coglan wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hi all,<div><br></div><div>I have a problem I'm not sure how to solve, more of a general programming problem than a Ruby thing. Basically, say you have an indefinite stream of random bits:</div><div><br></div><div><div>
1100111001110110101100000110101011011110110011111001101000001000111000100000011001111110100010000001000001111110100010010100111111011101110110011111001101010101101111111011101111111000010001001001100100100101011100001001000001110101011101101101010011100111 ...</div>
<div><br></div><div>and you want to turn it into a stream of characters from an arbitrary-size list of characters, let's say the 26 letters from A to Z. You want the letters to be evenly distributed in the output; each letter should have an equal probability of appearing.</div>
<div><br></div><div>This is trivial if the character set's size is a power of two, since you can chop off log2(N) bits at a time and turn them into a valid index. But I'm not sure how to do it correctly for arbitrary set sizes. Suggestions?</div>
<div><br></div>-- <br>James Coglan<br><a href="http://jcoglan.com/">http://jcoglan.com</a><br>+44 (0) 7771512510<br>
</div>
_______________________________________________<br>Chat mailing list<br><a href="mailto:Chat@lists.lrug.org">Chat@lists.lrug.org</a><br>http://lists.lrug.org/listinfo.cgi/chat-lrug.org<br></blockquote></div><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">--<br>Chris Parsons<br><a href="mailto:chris.p@rsons.org">chris.p@rsons.org</a><br>http://twitter.com/chrismdp<br>http://pa.rsons.org<br><br><br><br></span>
</div>
<br></div></div></body></html>