2

このコードを書くのに苦労しています。

2 つのオブジェクトから最高値を計算しようとしています。「S」オブジェクトと「P」オブジェクトを別々に開始しました。

var S = [
    { id: '1', value: '##' },
    { id: '2', value: '##' },
    { id: '3', value: '##' },
    { id: 'N', value: '##' }
];

var P = [
    { id: '1', value: '##' },
    { id: '2', value: '##' },
    { id: '3', value: '##' },
    { id: 'N', value: '##' }
];

3 番目のオブジェクトを作成しました。

var myobject = {
    'S1' = {
        'P1' = '25',
        'P2' = '32',
        'P3' = '65',
        'PN' = '##'
    },
    'S2' = {
        'P1' = '24',
        'P2' = '31',
        'P3' = '64',
        'PN' = '##'
    },
    'S3' = {
        'P1' = '26',
        'P2' = '33',
        'P3' = '66',
        'PN' = '##'
    },
    'SN' = {
        'P1' = '##',
        'P2' = '##',
        'P3' = '##',
        'PN' = '##'
    }
};

そして、すべての値を繰り返し処理して、組み合わせで最高の値が生成されることを確認する必要があります。次に例を示します。

S1.P1 + S2.P1 + S3.P1 = ?
S1.P1 + S2.P1 + S3.P2 = ?
S1.P1 + S2.P1 + S3.P3 = ?
S1.P1 + S2.P2 + S3.P1 = ?
S1.P1 + S2.P2 + S3.P2 = ?
S1.P1 + S2.P2 + S3.P3 = ?
...

上記の値の例を使用して、私が探している答えは次のとおりです。

S1.P3 + S2.P3 + S3.P3 = 195

事態を複雑にするために、場合によっては、「P」値が式で 1 ​​回しか使用されないことがあります。

var P = [
    { id: '1', value: '##' },
    { id: '2', value: '##' },
    { id: '3', value: '##', once: true },
    { id: 'N', value: '##' }
];

「P3」が一度しか使用できない場合、上記の値の例を使用して探している答えは次のとおりです。

S1.P2 + S2.P2 + S3.P3 = 129;

少し再帰が必要だと思います....しかし、頭が痛いです。

編集

計算を作成しようとしているループで迷子になっています。たとえば、次のようになります。

foreach "S"
    foreach "P"
        foreach "S"
            foreach "P"
                ....

提案?

4

2 に答える 2

6

a + b > a + cのすべてについて、 、、... のそれぞれから最大値を取得し、それらをa合計b > cすることはできませんか?S1S2S3

あなたが何をしているのかを完全に理解しているかどうかはわかりませんが、これは過度の再帰を避けるのに役立つはずです.

于 2012-11-19T18:43:44.773 に答える
0

みんなありがとう....うまくいくものがあると思います。

オブジェクトを次のように変更しました。

var myobject = {
    'S1-P1' = '25',
    'S1-P2' = '32',
    'S1-P3' = '65',
    'S1-PN' = '##'
    'S2-P1' = '24',
    'S2-P2' = '31',
    'S2-P3' = '64',
    'S2-PN' = '##'
    'S3-P1' = '26',
    'S3-P2' = '33',
    'S3-P3' = '66',
    'S3-PN' = '##'
    'SN-P1' = '##',
    'SN-P2' = '##',
    'SN-P3' = '##',
    'SN-PN' = '##'
};

...そしてこれを実行しました:

ids = [];
_.each(S, function(Sn){
    ids.push(Sn.id);
});

var totals = [];
while (ids.length){
    var best = { s_id: null, p_id: null, amount: 0 };
    for (var s1 in myobject) {
        if (best.amount < myobject[s1]){
            id = s1.split('-');
            best = { s_id: id[0], p_id: id[1], amount: myobject[s1] };
        }
    }
    var once = false;
    _.each(P, function(Pn){
        if (Pn.id == best.p_id & Pn.once)
            once = true;
    });
    for (var s2 in myobject) {
        id = s2.split('-');
        if (best.s_id == id[0])
            delete myobject[s2];
        if (once && best.p_id == id[1])
            delete myobject[s2];
    }

    var index = ids.indexOf(best.s_id);
    ids.splice(index, 1);

    totals.push(best);
}
console.log(totals);

....うまくいくようです。

于 2012-11-19T19:39:14.287 に答える