CoffeeScript で加重乱数ジェネレーターを作成したいと考えています。
Javascript コードは次のとおりです。
// init
var chances = {
red: 1,
blue: 4,
yellow: 10
},
bag = [];
// fill the bag with the values
for (var chance in chances) {
for (var i=0; i<chances[chance]; ++i) {
bag.push(chance);
}
}
// get random element
var index = Math.floor(Math.random()*bag.length,
element = bag[index];
もちろん、あまり洗練されていない方法 (変数 init なし) で作成することもできます。
for chance, value of chances
for [1..value]
bag.push(chance)
index = Math.floor(Math.random()*bag.length;
element = bag[index];
コードを簡素化し、最適なソリューションを作成したいのですが、行き詰まっています:
bag = ((k for [1..v]) for k, v of chances)
このコードは、目的の値を含む配列を含む配列を作成しますが、明らかに必要なものではなく、適切な方法でそれを行う方法がわかりません。