CJam, 21 1717 12 bytes
Edit: Had to change '[
to '\
since Z wasn't included.Thanks to Martin Ender for saving me 5 bytes!
New version
'\,{,'A:,s_el-}%M*mr0=mR
This forms an array of strings following the pattern A
, AB
, ABC
, and so on. It flattens it and chooses a random character. Since this string contains 26 A's, 25 B's, 24 C's, and so on, each letter has a distinct probability of being chosen.
Explanation
'\, e# Push the range containingof all characters up to '[' (next ASCII character after Z)'Z'
{,'A:,-}% e# For each characterone, pushtake the range of all characters from itup to 'A'. it
s e# This will be anConvert emptythe stringarray forof anyranges characterto beforeone 'A'.string
_el- e# M*Subtract the lower case version e#of Jointhe withstring nofrom separatoritself
mr e# ShuffleThis theleaves string
only capital letters in the string
0=mR e# GetTake thea firstrandom character from it
Old version
26,:)'[,'A,- .*M*mr0=
Gets distinct probabilities by making a string in which each letter appears a number of times equal to its position in the alphabet.
26,:) e# Push 1, 2, ... 26
'[,'A,- e# Push 'A', 'B', ... 'Z'
.* e# Vectorize: repeat each letter the corresponding number of times
M* e# Join with no separator
mr e# Shuffle the string
0= e# Get the first character