1

私は「億万長者になりたい人」のクローンを書いていて、ちょっとした問題に出くわしました。

各回答のパーセンテージを示し、回答が正しい可能性を示すジョーカーがあります。これを行うには、各間違った答えに 15% を割り当て、残りの 55% を正しい答えに割り当てます。

次に、これらの回答を (レベル * 10) 回ループし、回答の 1 つ (ランダムに選択) から他の回答の 1 つ (これもランダムに選択) に 1% を分配するループを使用します。

その背後にある考え方は、より低いレベルでもより高いパーセンテージで真の答えを覗き見することをほとんど示しますが、より高いレベルでは、ほとんどのパーセンテージで間違った回答を表示するか、回答間の全体的な平等を示す可能性が高いということです。 .

悲しいかな、それは想像したほどうまく機能していません。高レベル (12 まで上がる) でさえ、真の答えはまだ非常にはっきりと見えており、これを改善するためにどのようなアルゴリズムを使用できるかはわかりません!

4

2 に答える 2

1

線形歪みの代わりに指数歪みを使用してみることができます。

ここでJavaScriptの実装を参照してください:http://jsfiddle.net/hua7R/1/

まず、レベル数と指数歪みを設定します。

var levels=12,
    distortion=5;

次の関数は重要ではありません。ログを列に分散させるためにのみ使用しました。

function numToStr(n){
    var s=String(n);
    for(var i=s.length;i<3;i++){
        s=' '+s;
    }
    return s;
}

レベル間の違いを確認するために、すべてのレベルを繰り返します。

for(var l=0;l<=levels;l++){

    //In this test the right solution is always the last:

    var percentages=[15,15,15,55];

    /*The following function gives us a random number from 0 (included)
      to `percentage`'s lenght (not included).
      If it's called with the argument `true`, it checks if we can
      subtract 1 to that percentage (we don't want negative percentages).*/

    function random(cond){
        var i=Math.floor(Math.random()*percentages.length);
        if(!cond||percentages[i]>0){
            return i;
        }
        return random(true);
    }

    /*Then we iterate from 0 to the maximum value between `l*10`
      (`l` is the current level) and `l` raised to the power of `distortion`*/

    for(var i=0;i<Math.max(l*10,Math.pow(l,distortion));i++){
        percentages[random(true)]--;
        percentages[random()]++;
    }

    //Finally, the log:

    document.getElementById('log').innerHTML+="level "+numToStr(l)+" -> ["+numToStr(percentages[0])+", "+numToStr(percentages[1])+", "+numToStr(percentages[2])+", "+numToStr(percentages[3])+"]\n";
}
于 2012-08-14T17:30:02.480 に答える
1

確率分布について分析することなく、あなたのために働くかもしれない理解しやすいアルゴリズムは次のようになると思います:

select 100 rand numbers from 1 to n (I will get to how you set n)
calculate how many 1's,2's,3's and numbers >= 4 you get
Use these counts as your answer scores, with the counts for >=4 being for the correct answer

たとえば、n を 4 にすると、すべての回答で平均 25% のスコアが得られます。n を 5 に設定すると、正解には平均で 40% のスコアが割り当てられます。n、描画するランドの数、および数値を回答にマッピングする方法 (たとえば、1 と 2 を 2 番目に適切な回答に割り当てることができます) を変えることで、平均と分散を非常に正確に変えることができます。

確率分布についてもっと理解していれば、これらは間違いなくこれを直接行うためのより良い方法です。この方法は、アルゴリズムを単純にするためだけのものです。

于 2012-08-14T19:02:42.173 に答える