// your code goes here
function test() {
var pairs = [
[
0.3651525589431013,
-0.27439756555180383
],
[
0.3813596282820899,
0.4129001439443434
],
[
-0.40018595972934246,
0.036322476938139614
],
[
0.20103910110236267,
-0.2264911463633661
],
[
-0.1471193507514823,
0.1516517904486454
],
[
-0.19961312123638275,
0.32420867690476274
],
[
0.1314693103938107,
0.08386231037821523
],
[
-0.032350923965245526,
-0.08835329409158366
],
[
0.16155915573252155,
-0.4197447029259542
],
[
-0.3500723889425785,
0.3242683106460933
],
[
0.0038728621410171193,
-0.17427372192135038
],
[
-0.423077654432064,
-0.1555870759775846
],
[
-0.3500406380269585,
-0.3323007306131922
],
[
-0.15159191832180485,
-0.4460865795125559
],
[
-0.06187302589028665,
-0.37137387344903305
],
[
-0.25982881637857824,
0.41202334197573753
],
[
0.37973732322691345,
0.21779452042026382
],
[
-0.42958878111592,
-0.18148614115362371
],
[
-0.0642675349597035,
-0.4440804036878956
],
[
-0.1496008196436347,
-0.445780771513441
],
[
-0.37718478711604675,
0.08218318185662543
],
[
0.3674431561443947,
-0.49488478131287494
]
];
console.time('time');
var sum = 0, sum0, sum1, newSum;
var selected = [];
$.each(pairs, function(k, v) {
sum0 = sum + v[0];
sum1 = sum + v[1];
var i = Math.abs(sum1) > Math.abs(sum0) ? 0 : 1;
selected.push(i);
sum += v[i];
});
var checkAgain = 0;
do {
$.each(pairs, function(k, v) {
var selectedKey = selected[k];
var nonSelectedKey = selected[k] === 1 ? 0 : 1;
newSum = sum - v[selectedKey] + v[nonSelectedKey];
if (newSum > 0 && (sum < 0 || newSum < sum)) {
sum = newSum;
selected[k] = nonSelectedKey;
checkAgain = true;
console.log(sum, selected);
return false;
}
checkAgain = false;
});
} while (checkAgain);
console.log(sum, selected);
console.timeEnd('time');
}
Ly8geW91ciBjb2RlIGdvZXMgaGVyZQpmdW5jdGlvbiB0ZXN0KCkgewoKCXZhciBwYWlycyA9IFsKICAgWwogICAgICAwLjM2NTE1MjU1ODk0MzEwMTMsCiAgICAgIC0wLjI3NDM5NzU2NTU1MTgwMzgzCiAgIF0sCiAgIFsKICAgICAgMC4zODEzNTk2MjgyODIwODk5LAogICAgICAwLjQxMjkwMDE0Mzk0NDM0MzQKICAgXSwKICAgWwogICAgICAtMC40MDAxODU5NTk3MjkzNDI0NiwKICAgICAgMC4wMzYzMjI0NzY5MzgxMzk2MTQKICAgXSwKICAgWwogICAgICAwLjIwMTAzOTEwMTEwMjM2MjY3LAogICAgICAtMC4yMjY0OTExNDYzNjMzNjYxCiAgIF0sCiAgIFsKICAgICAgLTAuMTQ3MTE5MzUwNzUxNDgyMywKICAgICAgMC4xNTE2NTE3OTA0NDg2NDU0CiAgIF0sCiAgIFsKICAgICAgLTAuMTk5NjEzMTIxMjM2MzgyNzUsCiAgICAgIDAuMzI0MjA4Njc2OTA0NzYyNzQKICAgXSwKICAgWwogICAgICAwLjEzMTQ2OTMxMDM5MzgxMDcsCiAgICAgIDAuMDgzODYyMzEwMzc4MjE1MjMKICAgXSwKICAgWwogICAgICAtMC4wMzIzNTA5MjM5NjUyNDU1MjYsCiAgICAgIC0wLjA4ODM1MzI5NDA5MTU4MzY2CiAgIF0sCiAgIFsKICAgICAgMC4xNjE1NTkxNTU3MzI1MjE1NSwKICAgICAgLTAuNDE5NzQ0NzAyOTI1OTU0MgogICBdLAogICBbCiAgICAgIC0wLjM1MDA3MjM4ODk0MjU3ODUsCiAgICAgIDAuMzI0MjY4MzEwNjQ2MDkzMwogICBdLAogICBbCiAgICAgIDAuMDAzODcyODYyMTQxMDE3MTE5MywKICAgICAgLTAuMTc0MjczNzIxOTIxMzUwMzgKICAgXSwKICAgWwogICAgICAtMC40MjMwNzc2NTQ0MzIwNjQsCiAgICAgIC0wLjE1NTU4NzA3NTk3NzU4NDYKICAgXSwKICAgWwogICAgICAtMC4zNTAwNDA2MzgwMjY5NTg1LAogICAgICAtMC4zMzIzMDA3MzA2MTMxOTIyCiAgIF0sCiAgIFsKICAgICAgLTAuMTUxNTkxOTE4MzIxODA0ODUsCiAgICAgIC0wLjQ0NjA4NjU3OTUxMjU1NTkKICAgXSwKICAgWwogICAgICAtMC4wNjE4NzMwMjU4OTAyODY2NSwKICAgICAgLTAuMzcxMzczODczNDQ5MDMzMDUKICAgXSwKICAgWwogICAgICAtMC4yNTk4Mjg4MTYzNzg1NzgyNCwKICAgICAgMC40MTIwMjMzNDE5NzU3Mzc1MwogICBdLAogICBbCiAgICAgIDAuMzc5NzM3MzIzMjI2OTEzNDUsCiAgICAgIDAuMjE3Nzk0NTIwNDIwMjYzODIKICAgXSwKICAgWwogICAgICAtMC40Mjk1ODg3ODExMTU5MiwKICAgICAgLTAuMTgxNDg2MTQxMTUzNjIzNzEKICAgXSwKICAgWwogICAgICAtMC4wNjQyNjc1MzQ5NTk3MDM1LAogICAgICAtMC40NDQwODA0MDM2ODc4OTU2CiAgIF0sCiAgIFsKICAgICAgLTAuMTQ5NjAwODE5NjQzNjM0NywKICAgICAgLTAuNDQ1NzgwNzcxNTEzNDQxCiAgIF0sCiAgIFsKICAgICAgLTAuMzc3MTg0Nzg3MTE2MDQ2NzUsCiAgICAgIDAuMDgyMTgzMTgxODU2NjI1NDMKICAgXSwKICAgWwogICAgICAwLjM2NzQ0MzE1NjE0NDM5NDcsCiAgICAgIC0wLjQ5NDg4NDc4MTMxMjg3NDk0CiAgIF0KXTsKCWNvbnNvbGUudGltZSgndGltZScpOwoJdmFyIHN1bSA9IDAsIHN1bTAsIHN1bTEsIG5ld1N1bTsKCXZhciBzZWxlY3RlZCA9IFtdOwoKCSQuZWFjaChwYWlycywgZnVuY3Rpb24oaywgdikgewoJCXN1bTAgPSBzdW0gKyB2WzBdOwoJCXN1bTEgPSBzdW0gKyB2WzFdOwoJCQoJCXZhciBpID0gTWF0aC5hYnMoc3VtMSkgPiBNYXRoLmFicyhzdW0wKSA/IDAgOiAxOwoKCQlzZWxlY3RlZC5wdXNoKGkpOwoJCXN1bSArPSB2W2ldOwoJfSk7CgoJdmFyIGNoZWNrQWdhaW4gPSAwOwoJZG8gewoJCSQuZWFjaChwYWlycywgZnVuY3Rpb24oaywgdikgewoJCQl2YXIgc2VsZWN0ZWRLZXkgPSBzZWxlY3RlZFtrXTsKCQkJdmFyIG5vblNlbGVjdGVkS2V5ID0gc2VsZWN0ZWRba10gPT09IDEgPyAwIDogMTsKCQkJbmV3U3VtID0gc3VtIC0gdltzZWxlY3RlZEtleV0gKyB2W25vblNlbGVjdGVkS2V5XTsKCQkJCgkJCWlmIChuZXdTdW0gPiAwICYmIChzdW0gPCAwIHx8IG5ld1N1bSA8IHN1bSkpIHsKCQkJCXN1bSA9IG5ld1N1bTsKCQkJCXNlbGVjdGVkW2tdID0gbm9uU2VsZWN0ZWRLZXk7CgkJCQljaGVja0FnYWluID0gdHJ1ZTsKCQkJCWNvbnNvbGUubG9nKHN1bSwgc2VsZWN0ZWQpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCQoJCQljaGVja0FnYWluID0gZmFsc2U7CgkJfSk7Cgl9IHdoaWxlIChjaGVja0FnYWluKTsKCQoJY29uc29sZS5sb2coc3VtLCBzZWxlY3RlZCk7Cgljb25zb2xlLnRpbWVFbmQoJ3RpbWUnKTsKfQo=