Created
November 17, 2017 02:54
-
-
Save 6174/f83d70444f068b7b4428364f6ad8d531 to your computer and use it in GitHub Desktop.
平均优化
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
this.averOptimize = function(list, betMoney) { | |
if ( betMoney <= list.length * 2 ) { | |
return list;// 投入金额小于基本注数,不做优化 | |
} | |
// 找到最大奖金 | |
var maxBonus = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].baseBonus > maxBonus ) { | |
maxBonus = list[i].baseBonus; | |
} | |
} | |
var baseMultCalc = 100; | |
if ( parseInt(betMoney) >= 10000 ) { | |
baseMultCalc = 1000; | |
} else if ( parseInt(betMoney) >= 100000 ) { | |
baseMultCalc = 10000; | |
} else if ( parseInt(betMoney) >= 1000000 ) { | |
baseMultCalc = 100000; | |
} | |
// mult[i] = (bMax / b[i]) * baseMultiCalc | |
var mult = new Array(); | |
for ( var i = 0; i < list.length; i++ ) { | |
mult[i] = Math.round((maxBonus / list[i].baseBonus) * baseMultCalc); | |
} | |
// baseDiv = SUM(mult[i]) | |
var baseDiv = 0; | |
for ( var i = 0; i < mult.length; i++ ) { | |
baseDiv += mult[i]; | |
} | |
// base = betMoney/(baseDiv*2) | |
var base = parseFloat(parseInt(betMoney)/(baseDiv*2)); | |
var totalNum = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
list[i].multiple = Math.round(base*mult[i]); | |
if ( list[i].multiple == 0 ) { | |
list[i].multiple = 1; | |
} | |
totalNum += list[i].multiple; | |
} | |
var initialNum = parseInt(betMoney)/2; | |
if ( initialNum > totalNum ) { | |
while ( initialNum > totalNum ) { | |
// 找到最小金额的投注 | |
var minBonus = parseFloat(list[0].baseBonus*list[0].multiple); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus < minBonus ) { | |
minBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus == minBonus ) { | |
list[i].multiple = list[i].multiple + 1; | |
totalNum++; | |
break; | |
} | |
} | |
} | |
} else if ( initialNum < totalNum ) { | |
while ( initialNum < totalNum ) { | |
// 找到最大金额的投注 | |
/*var maxBonus = parseFloat(list[0].baseBonus*list[0].multiple); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( (bonus > maxBonus) ) { | |
maxBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus == maxBonus ) { | |
list[i].multiple = list[i].multiple - 1; | |
totalNum--; | |
} | |
}*/ | |
var maxBonus = list[0].multiple; | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( (list[i].multiple > maxBonus) ) { | |
maxBonus = list[i].multiple; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].multiple == maxBonus ) { | |
list[i].multiple = list[i].multiple - 1; | |
totalNum--; | |
break; | |
} | |
} | |
} | |
} | |
return list; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* <p>Desc:竞彩类</p> | |
* <p>Author: luochang</p> | |
* <p>Copyright: Copyright (c) 2012</p> | |
* <p>Company: 北京中科易达科技发展有限责任公司</p> | |
* Added by Luochang at 2014/3/6 Version 1.0 | |
*/ | |
function Guess(lienseId, playId) { | |
this.licenseId = lienseId; // 彩种,9-竞彩足球,10-竞彩篮球 | |
this.playId = playId; // 玩法,足球:1-胜平负,2-让球,3-总进球,4-半全场,5-比分,6-混合过关 | |
// 篮球:1-胜负,2-让分胜负,3-胜分差,4-大小分,6-混合过关 | |
/** | |
* 组合过关到自由过关转化表 | |
*/ | |
var combCrMap = new Hashtable(); | |
/** | |
* 自由过关到组合过关转化 | |
*/ | |
var freeCrMap = new Hashtable(); | |
combCrMap.put("3c3", new Array("2c1")); // 3串3 | |
combCrMap.put("3c4", new Array("3c1", "2c1")); // 3串4 | |
freeCrMap.put("3_2","3c3"); // 3场3串3 | |
freeCrMap.put("3_23","3c4"); // 3场3串4 | |
combCrMap.put("4c4", new Array("3c1")); // 4串4 | |
combCrMap.put("4c5", new Array("4c1", "3c1")); // 4串5 | |
combCrMap.put("4c6", new Array("2c1")); // 4串6 | |
combCrMap.put("4c11", new Array("4c1", "3c1", "2c1")); // 4串11 | |
freeCrMap.put("4_3","4c4"); // 4场4串4 | |
freeCrMap.put("4_34","4c5"); // 4场4串5 | |
freeCrMap.put("4_2","4c6"); // 4场4串6 | |
freeCrMap.put("4_234","4c11"); // 4场4串11 | |
combCrMap.put("5c5", new Array("4c1")); // 5串5 | |
combCrMap.put("5c6", new Array("5c1", "4c1")); // 5串6 | |
combCrMap.put("5c10", new Array("2c1")); // 5串10 | |
combCrMap.put("5c16", new Array("5c1", "4c1", "3c1")); // 5串16 | |
combCrMap.put("5c20", new Array("3c1", "2c1")); // 5串20 | |
combCrMap.put("5c26", new Array("5c1", "4c1", "3c1", "2c1")); // 5串26 | |
freeCrMap.put("5_4","5c5"); // 5场5串5 | |
freeCrMap.put("5_45","5c6"); // 5场5串6 | |
freeCrMap.put("5_2","5c10"); // 5场5串10 | |
freeCrMap.put("5_345","5c16"); // 5场5串16 | |
freeCrMap.put("5_23","5c20"); // 5场5串20 | |
freeCrMap.put("5_2345","5c26"); // 5场5串26 | |
combCrMap.put("6c6", new Array("5c1")); // 6串6 | |
combCrMap.put("6c7", new Array("6c1", "5c1")); // 6串7 | |
combCrMap.put("6c15", new Array("2c1")); // 6串15 | |
combCrMap.put("6c20", new Array("3c1")); // 6串20 | |
combCrMap.put("6c22", new Array("6c1", "5c1", "4c1")); // 6串22 | |
combCrMap.put("6c35", new Array("3c1", "2c1")); // 6串35 | |
combCrMap.put("6c42", new Array("6c1", "5c1", "4c1", "3c1")); // 6串42 | |
combCrMap.put("6c50", new Array("4c1", "3c1", "2c1")); // 6串50 | |
combCrMap.put("6c57", new Array("6c1", "5c1", "4c1", "3c1", "2c1"));// 6串57 | |
freeCrMap.put("6_5","6c6"); // 6场6串6 | |
freeCrMap.put("6_56","6c7"); // 6场6串7 | |
freeCrMap.put("6_2","6c15"); // 6场6串15 | |
freeCrMap.put("6_3","6c20"); // 6场6串20 | |
freeCrMap.put("6_456","6c22"); // 6场6串22 | |
freeCrMap.put("6_23","6c35"); // 6场6串35 | |
freeCrMap.put("6_3456","6c42"); // 6场6串42 | |
freeCrMap.put("6_234","6c50"); // 6场6串50 | |
freeCrMap.put("6_23456","6c57"); // 6场6串57 | |
combCrMap.put("7c7", new Array("6c1")); // 7串7 | |
combCrMap.put("7c8", new Array("7c1", "6c1")); // 7串8 | |
combCrMap.put("7c21", new Array("5c1")); // 7串21 | |
combCrMap.put("7c35", new Array("4c1")); // 7串35 | |
combCrMap.put("7c120", new Array("7c1", "6c1", "5c1", "4c1", "3c1", "2c1"));// 7串120 | |
freeCrMap.put("7_6","7c7"); // 7场7串7 | |
freeCrMap.put("7_67","7c8"); // 7场7串8 | |
freeCrMap.put("7_5","7c21"); // 7场7串21 | |
freeCrMap.put("7_4","7c35"); // 7场7串35 | |
freeCrMap.put("7_234567","7c120"); // 7场7串120 | |
combCrMap.put("8c8", new Array("7c1")); // 8串8 | |
combCrMap.put("8c9", new Array("8c1", "7c1")); // 8串9 | |
combCrMap.put("8c28", new Array("6c1")); // 8串28 | |
combCrMap.put("8c56", new Array("5c1")); // 8串56 | |
combCrMap.put("8c70", new Array("4c1")); // 8串70 | |
combCrMap.put("8c247", new Array("8c1", "7c1", "6c1", "5c1", "4c1", "3c1", "2c1")); // 8串247 | |
freeCrMap.put("8_7","8c8"); // 8场8串8 | |
freeCrMap.put("8_78","8c9"); // 8场8串9 | |
freeCrMap.put("8_6","8c28"); // 8场8串28 | |
freeCrMap.put("8_5","8c56"); // 8场8串56 | |
freeCrMap.put("8_4","8c70"); // 8场8串70 | |
freeCrMap.put("8_2345678","8c247"); // 8场8串247 | |
var PPMAP = new Hashtable(); // 每种自由过关对应的组合过关方式,奖金明细中使用 | |
PPMAP.put("2c1", new Array("3c3", "3c4" ,"4c6", "4c11", "5c10", "5c20", "5c26", "6c15", "6c35", "6c50", "6c57", "7c120", "8c247")); | |
PPMAP.put("3c1", new Array("3c4", "4c4", "4c5", "4c11", "5c16", "5c20", "5c26", "6c20", "6c35", "6c42", "6c50", "6c57", "7c120", "8c247")); | |
PPMAP.put("4c1", new Array("4c5", "4c11", "5c5", "5c6", "5c16", "5c26", "6c22", "6c42", "6c50", "6c57", "7c35", "7c120", "8c70", "8c247")); | |
PPMAP.put("5c1", new Array("5c6", "5c16", "5c26", "6c6", "6c7", "6c22", "6c42", "6c57", "7c21", "7c120", "8c56", "8c247")); | |
PPMAP.put("6c1", new Array("6c7", "6c22", "6c42", "6c57", "7c7", "7c8", "7c120", "8c28", "8c247")); | |
PPMAP.put("7c1", new Array("7c8", "7c120", "8c8", "8c9", "8c247")); | |
PPMAP.put("8c1", new Array("8c9", "8c247")); | |
var combAlg = new CombAlgorithm(); | |
/** | |
* 对阵映射表 | |
*/ | |
this.scheduleMap = new Hashtable(); | |
/** | |
* 初始化对阵信息 | |
*/ | |
this.init = function() { | |
if ( this.licenseId == 9 ) { | |
for ( var i = 0; i < schedules.length; i++ ) { | |
var g = new GuessFootballSchedule(schedules[i].id, schedules[i].leaguename, schedules[i].hostname, | |
schedules[i].guestname, schedules[i].overodds, schedules[i].starttime, schedules[i].stoptime, | |
schedules[i].spfdgodds, schedules[i].spfggodds, schedules[i].rqspfdgodds, schedules[i].rqspfggodds, | |
schedules[i].zjqdgodds, schedules[i].zjqggodds, schedules[i].bqcdgodds, schedules[i].bqcggodds, | |
schedules[i].bfodds, schedules[i].dgrq, schedules[i].ggrq, schedules[i].schudlesno, schedules[i].bgcolor); | |
this.scheduleMap.put(schedules[i].id, g); | |
} | |
//alert(scheduleMap.get('20140402007').getSpfGgBetOdd("3")); | |
} else if ( this.licenseId == 10 ) { | |
for ( var i = 0; i < schedules.length; i++ ) { | |
var g = new GuessBasketballSchedule(schedules[i].id, schedules[i].leaguename, schedules[i].hostname, | |
schedules[i].guestname, schedules[i].overodds, schedules[i].starttime, schedules[i].stoptime, | |
schedules[i].sfdgodds, schedules[i].sfggodds, schedules[i].rfsfdgodds, schedules[i].rfsfggodds, | |
schedules[i].sfcodds, schedules[i].dxfdgodds, schedules[i].dxfggodds, schedules[i].dgrf, | |
schedules[i].ggqf, schedules[i].dgyszf, schedules[i].ggyszf, schedules[i].bgcolor); | |
this.scheduleMap.put(schedules[i].id, g); | |
} | |
//alert(scheduleMap.get('20140402301').getSfGgBetOdd("3")); | |
} | |
} | |
/** | |
* 自由过关转化成组合过关,减少票的输出 added at 2015/03/25 | |
* @param schLen,选择场次数 | |
* @param passTypeArray,过关方式串,逗号隔开 | |
* return 优化后的过关,逗号隔开 | |
*/ | |
this.optimizePassType = function(schLen, passTypeArray, betCode) { | |
var maxLen = this.getMaxPassNum(); | |
if ( this.playId == 6 ) { | |
// 判断是否每个对阵都选一种玩法 | |
var single = true; | |
var cInfo = betCode.split("|"); | |
for (var i = 0; i < cInfo.length; i++ ) { | |
var p = cInfo[i].split(":")[1].split(",")[0].split("-")[0]; | |
var pp = cInfo[i].split(":")[1].split(","); | |
for ( var j = 0; j < pp.length; j++ ) { | |
if ( pp[j].split("-")[0] != p ) { | |
single = false; | |
break; | |
} | |
} | |
if ( !single ) { | |
break; | |
} | |
} | |
if ( single ) { | |
// 取最大过关数 | |
maxLen = this.getMixedMaxPassNum(betCode); | |
} else { | |
return passTypeArray; | |
} | |
} | |
if ( schLen > maxLen || schLen < 2 ) { | |
return passTypeArray; | |
} | |
// 含有设胆不能合单 | |
var codes = betCode.split("|"); | |
for ( var i = 0; i < codes.length; i++ ) { | |
var dd = codes[i].split(":"); | |
if ( dd[2] == "2" ) { | |
return passTypeArray; | |
} | |
} | |
var pts = passTypeArray.split(","); | |
var retPtArray = new Array(); | |
var retSPtArray = new Array(); | |
var fryPsArray = new Array(); | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( pts[i].split("c")[1] == "1" ) { | |
fryPsArray.push(pts[i].split("c")[0]); | |
} else { | |
retSPtArray.push(pts[i]); | |
} | |
} | |
var count = fryPsArray.length; | |
if ( count > 0 ) { | |
this.joinFreePt(schLen, retPtArray, fryPsArray); | |
} | |
// 合并之后剩下的自由过关 | |
for ( var o = 0; o < fryPsArray.length; o++ ) { | |
var exist = false; | |
for ( var i = 0; i < retPtArray.length; i++ ) { | |
var localArrayString = combCrMap.get(retPtArray[i]).toString(); | |
if ( localArrayString.indexOf(fryPsArray[o]+"c1") > -1 ) { | |
exist = true; | |
break; | |
} | |
} | |
if ( !exist ) { | |
retPtArray.push(fryPsArray[o]+"c1"); | |
} | |
} | |
var retPt = ""; | |
for ( var i = 0; i < retPtArray.length; i++ ) { | |
retPt += retPtArray[i] + ","; | |
} | |
for ( var i = 0; i < retSPtArray.length; i++ ) { | |
retPt += retSPtArray[i] + ","; | |
} | |
retPt = retPt.substring(0, retPt.length - 1); | |
return retPt; | |
} | |
/** | |
* 合并自由过关成组合过关 | |
*/ | |
this.joinFreePt = function(schLen, retPtArray, fryPsArray) { | |
var count = fryPsArray.length; | |
while ( count > 0 ) { | |
var list = combAlg.findComb(fryPsArray, fryPsArray.length, count); | |
var exist = false; | |
for ( var i = 0; i < list.length; i++ ) { | |
var pstring = ""; | |
for ( var j = 0; j < list[i].length; j++ ) { | |
pstring += list[i][j]; | |
} | |
if ( freeCrMap.get(schLen+"_"+pstring) != 'undefined' ) { | |
// 重新设置fryPsArray数组 | |
retPtArray.push(freeCrMap.get(schLen+"_"+pstring)); | |
var nPsArray = new Array(); | |
for ( var o = 0; o < fryPsArray.length; o++ ) { | |
if ( pstring.indexOf(fryPsArray[o]) == -1 ) { | |
nPsArray.push(fryPsArray[o]); | |
} | |
} | |
this.joinFreePt(schLen, retPtArray, nPsArray); | |
exist = true; | |
break; | |
} | |
} | |
if ( exist ) { | |
break; | |
} | |
count--; | |
} | |
} | |
/** | |
* 获取混合关的最大过关数 | |
*/ | |
this.getMixedMaxPassNum = function(betCode) { | |
var pn = 8; | |
var codes = betCode.split("|"); | |
if ( this.licenseId == 9 ) { | |
for ( var i = 0; i < codes.length; i++ ) { | |
var pp = codes[i].split(":")[1].split(","); | |
for ( var j = 0; j < pp.length; j++ ) { | |
var p = parseInt(pp[j].split("-")[0],10); | |
switch( p ) { | |
case 3: | |
pn = pn > 6 ? 6 : pn; | |
break; | |
case 4: | |
pn = pn > 4 ? 4 : pn; | |
break; | |
case 5: | |
pn = pn > 4 ? 4 : pn; | |
break; | |
} | |
} | |
} | |
} else if ( this.licenseId == 10 ) { | |
for ( var i = 0; i < codes.length; i++ ) { | |
var pp = codes[i].split(":")[1].split(","); | |
for ( var j = 0; j < pp.length; j++ ) { | |
var p = parseInt(pp[j].split("-")[0],10); | |
switch( p ) { | |
case 3: | |
pn = pn > 4 ? 4 : pn; | |
break; | |
} | |
} | |
} | |
} | |
return pn; | |
} | |
/** | |
* 获取玩法最大过关数 | |
*/ | |
this.getMaxPassNum = function() { | |
var pn = 8; | |
if ( this.licenseId == 9 ) { | |
switch( this.playId ) { | |
case 1: | |
pn = 8; | |
break; | |
case 2: | |
pn = 8; | |
break; | |
case 3: | |
pn = 6; | |
break; | |
case 4: | |
pn = 4; | |
break; | |
case 5: | |
pn = 4; | |
break; | |
} | |
} else if ( this.licenseId == 10 ) { | |
switch( this.playId ) { | |
case 1: | |
pn = 8; | |
break; | |
case 2: | |
pn = 8; | |
break; | |
case 3: | |
pn = 4; | |
break; | |
case 4: | |
pn = 8; | |
break; | |
} | |
} | |
return pn; | |
} | |
/** | |
* 获取对阵比赛截止时间 | |
*/ | |
this.getStopTime = function(scheduleId) { | |
return this.scheduleMap.get(scheduleId).stopTime; | |
} | |
/** | |
* 获取对阵比赛开赛时间 | |
*/ | |
this.getStartTime = function(scheduleId) { | |
return this.scheduleMap.get(scheduleId).startTime; | |
} | |
/** | |
* 获取足球让球,篮球让分/预设总分 | |
*/ | |
this.getGgRqOrRf = function(scheduleId) { | |
var result = 0; | |
if ( this.licenseId == 9 ) { | |
result = this.scheduleMap.get(scheduleId).ggrq; | |
} else if ( this.licenseId == 10 ) { | |
result = this.scheduleMap.get(scheduleId).ggrf + "`" + this.scheduleMap.get(scheduleId).ggyszf; | |
} | |
return result; | |
} | |
/** | |
* 获取过关赔率(玩法的所有赔率) | |
*/ | |
this.getOdds = function(scheduleId) { | |
var odds = "0.0"; | |
if ( this.licenseId == 9 ) { | |
switch( this.playId ) { | |
case 1: | |
odds = this.scheduleMap.get(scheduleId).spfGgOdds; | |
break; | |
case 2: | |
odds = this.scheduleMap.get(scheduleId).rqspfGgOdds; | |
break; | |
case 3: | |
odds = this.scheduleMap.get(scheduleId).zjqGgOdds; | |
break; | |
case 4: | |
odds = this.scheduleMap.get(scheduleId).bqcGgOdds; | |
break; | |
case 5: | |
odds = this.scheduleMap.get(scheduleId).bfGgOdds; | |
break; | |
} | |
} else if ( this.licenseId == 10 ) { | |
switch( this.playId ) { | |
case 1: | |
odds = this.scheduleMap.get(scheduleId).sfGgOdds; | |
break; | |
case 2: | |
odds = this.scheduleMap.get(scheduleId).rfsfGgOdds; | |
break; | |
case 3: | |
odds = this.scheduleMap.get(scheduleId).sfcGgOdds; | |
break; | |
case 4: | |
odds = this.scheduleMap.get(scheduleId).dxfGgOdds; | |
break; | |
} | |
} | |
return odds; | |
} | |
/** | |
* 获取过关彩果的赔率(单个) | |
* @param scheduleId,对阵编号 | |
* @param bet,彩果 | |
*/ | |
this.getBetOdds = function(scheduleId, bet) { | |
var odds = "0.0"; | |
var swt = this.playId; | |
if ( this.playId == 6 ) { | |
// 混合过关 | |
var splitBet = bet.split("-"); | |
swt = parseInt(splitBet[0]); | |
bet = splitBet[1]; | |
} | |
if ( this.licenseId == 9 ) { | |
switch( swt ) { | |
case 1: | |
odds = this.scheduleMap.get(scheduleId).getSpfGgBetOdd(bet); | |
break; | |
case 2: | |
odds = this.scheduleMap.get(scheduleId).getRqspfGgBetOdd(bet); | |
break; | |
case 3: | |
odds = this.scheduleMap.get(scheduleId).getZjqGgBetOdd(bet); | |
break; | |
case 4: | |
odds = this.scheduleMap.get(scheduleId).getBqcGgBetOdd(bet); | |
break; | |
case 5: | |
odds = this.scheduleMap.get(scheduleId).getBfBetOdd(bet); | |
break; | |
} | |
} else if ( this.licenseId == 10 ) { | |
switch( swt ) { | |
case 1: | |
odds = this.scheduleMap.get(scheduleId).getSfGgBetOdd(bet); | |
break; | |
case 2: | |
odds = this.scheduleMap.get(scheduleId).getRfsfGgBetOdd(bet); | |
break; | |
case 3: | |
odds = this.scheduleMap.get(scheduleId).getSfcGgBetOdd(bet); | |
break; | |
case 4: | |
odds = this.scheduleMap.get(scheduleId).getDxfGgBetOdd(bet); | |
break; | |
} | |
} | |
return odds; | |
} | |
/** | |
* 滤出混合串投注码(计算混合过关奖金调用) added by luochang at 2014/08/11 | |
* @param betCode | |
* @param type 1-最大赔率,2-最小赔率 | |
* @return 过滤之后的betCode | |
*/ | |
this.filteMutexs = function(betCode, type) { | |
var betCodes = betCode.split("|"); | |
var nBetCode = ""; | |
for ( var i = 0; i < betCodes.length; i++ ) { | |
var lineInfo = betCodes[i].split(":"); | |
nBetCode += lineInfo[0] + ":"; | |
var bets = lineInfo[1].split(","); | |
var betInfo = ""; | |
// 取得最大的赔率,将与该赔率互斥的选项去掉 | |
var maxOdd = parseFloat(this.getBetOdds(lineInfo[0], bets[0])); | |
var maxBet = bets[0]; | |
for ( var j = 0; j < bets.length; j++ ) { | |
if ( type == 1 ) { | |
if ( parseFloat(this.getBetOdds(lineInfo[0], bets[j])) > maxOdd ) { | |
maxOdd = parseFloat(this.getBetOdds(lineInfo[0], bets[j])); | |
maxBet = bets[j]; | |
} | |
} else { | |
if ( parseFloat(this.getBetOdds(lineInfo[0], bets[j])) < maxOdd ) { | |
maxOdd = parseFloat(this.getBetOdds(lineInfo[0], bets[j])); | |
maxBet = bets[j]; | |
} | |
} | |
} | |
// 获取最大赔率的投注项的互斥项 | |
var mutex = this.getMutexMixedBets(lineInfo[0], maxBet); | |
for ( var j = 0; j < bets.length; j++ ) { | |
var isRemoved = false; | |
for ( var k = 0; k < mutex.length; k++ ) { | |
if ( (bets[j] == mutex[k]) && (bets[j] != maxBet) ) { | |
isRemoved = true; | |
break; | |
} | |
} | |
if ( !isRemoved ) { | |
nBetCode += bets[j] + ","; | |
} | |
} | |
nBetCode = nBetCode.substring(0, nBetCode.length - 1) + ":"; | |
nBetCode += lineInfo[2] + "|"; | |
} | |
nBetCode = nBetCode.substring(0, nBetCode.length - 1); | |
return nBetCode; | |
} | |
/** | |
* 获取混合过关互斥投注项 added by luochang at 2014/08/11 | |
* @param id, 对阵编号 | |
* @param bet, 投注项 | |
* @return arraylist | |
*/ | |
this.getMutexMixedBets = function(id, bet) { | |
var mutexBets = new Array(); | |
var desc = bet.split("-"); | |
if ( this.licenseId == 9 ) { // 竞彩足球 | |
var type = parseInt(desc[0]); | |
var rq = parseInt(this.getGgRqOrRf(id)); | |
switch(type) { | |
case 1: | |
{ | |
switch( desc[1] ) { | |
case "3": | |
if ( rq > 0 ) { | |
mutexBets.push("2-1"); | |
mutexBets.push("2-0"); | |
} else if ( rq == -1 ) { | |
mutexBets.push("2-0"); | |
} | |
for ( var i = 13; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-31"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-01"); | |
mutexBets.push("4-00"); | |
break; | |
case "1": | |
if ( rq > 0 ) { | |
mutexBets.push("2-1"); | |
mutexBets.push("2-0"); | |
} else { | |
mutexBets.push("2-3"); | |
mutexBets.push("2-1"); | |
} | |
for ( var i = 0; i < 13; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
for ( var i = 18; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-33"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-13"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-03"); | |
mutexBets.push("4-00"); | |
break; | |
case "0": | |
if ( rq > 0 ) { | |
if ( rq == 1 ) { | |
mutexBets.push("2-3"); | |
} | |
} else { | |
mutexBets.push("2-3"); | |
mutexBets.push("2-1"); | |
} | |
for ( var i = 0; i < 18; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-33"); | |
mutexBets.push("4-31"); | |
mutexBets.push("4-13"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-03"); | |
mutexBets.push("4-01"); | |
break; | |
} | |
break; | |
} | |
case 2: | |
{ | |
switch( desc[1] ) { | |
case "3": | |
if ( rq > 0 ) { | |
mutexBets.push("1-0"); | |
for ( var i = 18; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-30"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-00"); | |
} else { | |
mutexBets.push("1-1"); | |
mutexBets.push("1-0"); | |
for ( var i = 13; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-31"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-01"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-00"); | |
} | |
break; | |
case "1": | |
if ( rq > 0 ) { | |
mutexBets.push("1-3"); | |
mutexBets.push("1-1"); | |
for ( var i = 0; i < 18; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-33"); | |
mutexBets.push("4-13"); | |
mutexBets.push("4-03"); | |
mutexBets.push("4-31"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-01"); | |
} else { | |
mutexBets.push("1-1"); | |
mutexBets.push("1-0"); | |
for ( var i = 13; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-31"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-01"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-00"); | |
} | |
break; | |
case "0": | |
if ( rq > 0 ) { | |
mutexBets.push("1-3"); | |
mutexBets.push("1-1"); | |
for ( var i = 0; i < 18; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-33"); | |
mutexBets.push("4-13"); | |
mutexBets.push("4-03"); | |
mutexBets.push("4-31"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-01"); | |
} else { | |
if ( rq == -1 ) { | |
mutexBets.push("1-3"); | |
} else { | |
mutexBets.push("1-1"); | |
mutexBets.push("1-0"); | |
} | |
for ( var i = 13; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
mutexBets.push("4-31"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-01"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-00"); | |
} | |
break; | |
} | |
break; | |
} | |
case 5: | |
{ | |
var ibet = parseInt(desc[1]); | |
if ( ibet < 13 ) { | |
mutexBets.push("1-1"); | |
mutexBets.push("1-0"); | |
if ( rq > 0 ) { | |
mutexBets.push("2-1"); | |
mutexBets.push("2-0"); | |
} | |
mutexBets.push("4-31"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-01"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-00"); | |
} else if ( ibet < 18 ) { | |
mutexBets.push("1-3"); | |
mutexBets.push("1-0"); | |
if ( rq > 0 ) { | |
mutexBets.push("2-1"); | |
mutexBets.push("2-0"); | |
} else { | |
mutexBets.push("2-3"); | |
mutexBets.push("2-1"); | |
} | |
mutexBets.push("4-33"); | |
mutexBets.push("4-30"); | |
mutexBets.push("4-13"); | |
mutexBets.push("4-10"); | |
mutexBets.push("4-03"); | |
mutexBets.push("4-00"); | |
} else { | |
mutexBets.push("1-3"); | |
mutexBets.push("1-1"); | |
if ( rq > 0 ) { | |
} else { | |
mutexBets.push("2-3"); | |
mutexBets.push("2-1"); | |
} | |
mutexBets.push("4-33"); | |
mutexBets.push("4-31"); | |
mutexBets.push("4-13"); | |
mutexBets.push("4-11"); | |
mutexBets.push("4-03"); | |
mutexBets.push("4-01"); | |
} | |
break; | |
} | |
case 4: | |
{ | |
if ( desc[1] == "33" || desc[1] == "13" || desc[1] == "03" ) { | |
mutexBets.push("1-1"); | |
mutexBets.push("1-0"); | |
if ( rq > 0 ) { | |
mutexBets.push("2-1"); | |
mutexBets.push("2-0"); | |
} | |
for ( var i = 13; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
} else if ( desc[1] == "33" || desc[1] == "13" || desc[1] == "03" ) { | |
mutexBets.push("1-3"); | |
mutexBets.push("1-0"); | |
if ( rq > 0 ) { | |
mutexBets.push("2-1"); | |
mutexBets.push("2-0"); | |
} else { | |
mutexBets.push("2-3"); | |
mutexBets.push("2-1"); | |
} | |
for ( var i = 0; i < 13; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
for ( var i = 18; i < 31; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
} else { | |
mutexBets.push("1-3"); | |
mutexBets.push("1-1"); | |
if ( rq > 0 ) { | |
} else { | |
mutexBets.push("2-3"); | |
mutexBets.push("2-1"); | |
} | |
for ( var i = 0; i < 18; i++ ) { | |
mutexBets.push("5-" + i); | |
} | |
} | |
break; | |
} | |
case 3: | |
break; | |
} | |
} else if (this.licenseId == 10) { | |
var type = parseInt(desc[0]); | |
var rf = parseFloat(this.getGgRqOrRf(id)); | |
switch(type) { | |
case 1: | |
{ | |
if ( desc[0] == "3" ) { | |
if ( rf > 0 ) { | |
mutexBets.push("2-0"); | |
} | |
for ( var i = 0; i < 6; i++ ) { | |
mutexBets.push("3-" + i); | |
} | |
} else { | |
if ( rf > 0 ) { | |
} else { | |
mutexBets.push("2-3"); | |
} | |
for ( var i = 6; i < 12; i++ ) { | |
mutexBets.push("3-" + i); | |
} | |
} | |
break; | |
} | |
case 2: | |
{ | |
if ( desc[0] == "3" ) { | |
if ( rf > 0 ) { | |
} else { | |
mutexBets.push("2-0"); | |
for ( var i = 0; i < 6; i++ ) { | |
mutexBets.push("3-" + i); | |
} | |
} | |
} else { | |
if ( rf > 0 ) { | |
mutexBets.push("2-3"); | |
for ( var i = 6; i < 12; i++ ) { | |
mutexBets.push("3-" + i); | |
} | |
} else { | |
} | |
} | |
break; | |
} | |
case 3: | |
{ | |
if ( parseInt(desc[1]) > 5 ) { | |
mutexBets.push("1-0"); | |
if ( rf > 0 ) { | |
mutexBets.push("2-0"); | |
} | |
} else { | |
mutexBets.push("1-3"); | |
if ( rf > 0 ) { | |
} else { | |
mutexBets.push("2-3"); | |
} | |
} | |
break; | |
} | |
} | |
} | |
return mutexBets; | |
} | |
/** | |
* 计算自由过关注数 | |
* @param betArray,彩果,二维数组 new Array(new Array("3"),new Array("3","1"),new Array("3","1","0")) | |
* @param passType,自由过关方式 | |
* @return 注数 | |
*/ | |
this.calcFreePassNum = function(betArray, passType) { | |
var betNum = 0; | |
var cLen = parseInt(passType.split("c")[0]); | |
/* 返回三维数组 */ | |
var calcArrays = combAlg.findComb(betArray, betArray.length, cLen); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
var betN = 1; | |
for ( var j = 0; j < calcArrays[i].length; j++ ) { | |
betN *= calcArrays[i][j].length; | |
} | |
betNum += betN; | |
} | |
return betNum; | |
} | |
/** | |
* 计算组合过关过关注数 | |
* @param betArray,彩果,二维数组 new Array(new Array("3"),new Array("3","1"),new Array("3","1","0")) | |
* @param passType,组合过关方式 | |
* @return 注数 | |
*/ | |
this.calcCombPassNum = function(betArray, passType) { | |
var betNum = 0; | |
var cLen = parseInt(passType.split("c")[0]); | |
if ( cLen == betArray.length ) { | |
var freeArray = combCrMap.get(passType); | |
for ( var i = 0; i < freeArray.length; i++ ) { | |
betNum += this.calcFreePassNum(betArray, freeArray[i]); | |
} | |
} else { | |
var calcArrays = combAlg.findComb(betArray, betArray.length, cLen); | |
var freeArray = combCrMap.get(passType); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
for ( var j = 0; j < freeArray.length; j++ ) { | |
betNum += this.calcFreePassNum(calcArrays[i], freeArray[j]); | |
} | |
} | |
} | |
return betNum; | |
} | |
/** | |
* 计算注数 | |
* @param betArray,彩果,二维数组 new Array(new Array("3"),new Array("3","1"),new Array("3","1","0")) | |
* @param passArray,一维数组,存放过关方式 | |
* @return 注数 | |
*/ | |
this.calcBetNum0 = function(betArray, passArray) { | |
var betNum = 0; | |
for ( var i = 0; i < passArray.length; i++ ) { | |
if ( parseInt(passArray[i].split("c")[1]) > 1 ) { | |
betNum += this.calcCombPassNum(betArray, passArray[i]); | |
} else { | |
betNum += this.calcFreePassNum(betArray, passArray[i]); | |
} | |
} | |
return betNum; | |
} | |
/** | |
* 单关注数计算 | |
*/ | |
this.calcDgBetNum = function(betCode) { | |
var codes = betCode.split("|"); | |
var lent = 0; | |
for ( var i = 0; i < codes.length; i++ ) { | |
lent += codes[i].split(":")[1].split(",").length; | |
} | |
return lent; | |
} | |
/** | |
* 根据投注码计算注数(组合过关与自由过关通用,胆拖、非胆拖统一调用),页面统一调用此方法计算 | |
* @param betCode,投注码:20140402001:3,1:0|20140402002:3,1:0 | |
* @param passString,过关方式串:"2c1,3c1" | |
* @return 注数 | |
*/ | |
this.calcBetNum = function(betCode, passString) { | |
if ( passString == "1c1" ) { | |
return this.calcDgBetNum(betCode); | |
} | |
var betArray = new Array(); | |
var danBetArray = new Array(); | |
var bets = betCode.split("|"); | |
var pts = passString.split(","); | |
var betNum = 0; | |
if ( this.playId != 6 ) { // 非混关 | |
for ( var i = 0; i < bets.length; i++ ) { | |
var subBetArray = new Array(); | |
var pbts = bets[i].split(":")[1].split(","); | |
for ( var j = 0; j < pbts.length; j++ ) { | |
subBetArray.push(pbts[j]); | |
} | |
if ( bets[i].split(":")[2] == "2") { | |
// 胆 | |
danBetArray.push(subBetArray); | |
} else { | |
betArray.push(subBetArray); | |
} | |
} | |
if ( danBetArray.length == 0 ) { | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( parseInt(pts[i].split("c")[1]) > 1 ) { | |
betNum += this.calcCombPassNum(betArray, pts[i]); | |
} else { | |
betNum += this.calcFreePassNum(betArray, pts[i]); | |
} | |
} | |
} else { | |
// 胆拖注数计算 | |
var passArray = new Array(); | |
for ( var i = 0; i < pts.length; i++ ) { | |
passArray.push(pts[i]); | |
} | |
betNum = this.calcDanTuoBetNum(danBetArray, betArray, passArray); | |
} | |
} else { // 混关 | |
for ( var i = 0; i < bets.length; i++ ) { | |
var subBetArray = new Array(); | |
var pointerArray = new Array(); | |
var pbts = bets[i].split(":")[1].split(","); | |
var pointer = pbts[0].split("-")[0];; | |
for ( var j = 0; j < pbts.length; j++ ) { | |
if ( pointer != pbts[j].split("-")[0]) { | |
var nArray = new Array(); | |
for ( var k = 0; k < pointerArray.length; k++ ) { | |
nArray.push(pointerArray[k]); | |
} | |
subBetArray.push(nArray); | |
pointer = pbts[j].split("-")[0]; | |
pointerArray = new Array(); | |
pointerArray.push(pbts[j]); | |
if ( j == pbts.length - 1) { | |
var nArray = new Array(); | |
for ( var k = 0; k < pointerArray.length; k++ ) { | |
nArray.push(pointerArray[k]); | |
} | |
subBetArray.push(nArray); | |
} | |
} else { | |
pointerArray.push(pbts[j]); | |
if ( j == pbts.length - 1) { | |
var nArray = new Array(); | |
for ( var k = 0; k < pointerArray.length; k++ ) { | |
nArray.push(pointerArray[k]); | |
} | |
subBetArray.push(nArray); | |
} | |
} | |
} | |
if ( bets[i].split(":")[2] == "2") { | |
// 胆 | |
danBetArray.push(subBetArray); | |
} else { | |
betArray.push(subBetArray); | |
} | |
} | |
var passArray = new Array(); | |
for ( var i = 0; i < pts.length; i++ ) { | |
passArray.push(pts[i]); | |
} | |
if ( danBetArray.length == 0 ) { | |
betNum = this.calcMixedBetNum(betArray, passArray); | |
} else { | |
betNum = this.calcMixedDanTuoBetNum(danBetArray, betArray, passArray); | |
} | |
} | |
return betNum; | |
} | |
/** | |
* 计算胆拖注数(胆拖只支持自由过关),页面统一调用此方法计算 | |
* @param danBetArray,胆彩果,二维数组 new Array(new Array("3"),new Array("3","1"),new Array("3","1","0")) | |
* @param tuoBetArray,拖,二维数组 new Array(new Array("3"),new Array("3","1")) | |
* @param passArray,一维数组,存放过关方式 | |
* @return 注数 | |
*/ | |
this.calcDanTuoBetNum = function(danBetArray, tuoBetArray, passArray) { | |
var betNum = 0; | |
for ( var k = 0; k < passArray.length; k++ ) { | |
var cLen = parseInt(passArray[k].split("c")[0]); | |
/* 返回三维数组 */ | |
var calcArrays = combAlg.findComb(tuoBetArray, tuoBetArray.length, cLen - danBetArray.length); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
var betN = 1; | |
for ( var j = 0; j < calcArrays[i].length; j++ ) { | |
betN *= calcArrays[i][j].length; | |
} | |
for ( var j = 0; j < danBetArray.length; j++ ) { | |
betN *= danBetArray[j].length; | |
} | |
betNum += betN; | |
} | |
} | |
return betNum; | |
} | |
/** | |
* 获取上限奖金 | |
* @param cLen,过关数 | |
* @param bonus,奖金 | |
* 2串1 3串1单注封顶20万 | |
* 4-5串1封顶50万 | |
* 6-8串1封顶100万 | |
*/ | |
this.limitedBonus = function(cLen, bonus) { | |
if ( cLen == 2 || cLen == 3 ) { | |
if ( bonus > 200000 ) { | |
bonus = 200000; | |
} | |
} | |
if ( cLen == 4 || cLen == 5 ) { | |
if ( bonus > 500000 ) { | |
bonus = 500000; | |
} | |
} | |
if ( cLen == 6 || cLen == 7 || cLen == 8 ) { | |
if ( bonus > 1000000 ) { | |
bonus = 1000000; | |
} | |
} | |
return bonus; | |
} | |
/** | |
* 计算自由过关奖金 | |
* @param bonusArray,一维数组(数组存储每一个对阵的最大奖金或最小奖金) | |
* @param passType,过关方式,2x1,3x1... | |
* @param multiple,倍数 | |
*/ | |
this.calcFreePassBonus = function(bonusArray, passType, multiple) { | |
var bonus = 0; | |
var cLen = parseInt(passType.split("c")[0]); | |
var calcArrays = combAlg.findComb(bonusArray, bonusArray.length, cLen); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
var betN = 1; | |
for ( var j = 0; j < calcArrays[i].length; j++ ) { | |
betN *= parseFloat(calcArrays[i][j]); | |
} | |
bonus += betN; | |
} | |
bonus *= 2; | |
bonus = this.limitedBonus(cLen, bonus); | |
var bns = new Number(bonus * multiple); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算组合过关奖金 | |
* @param bonusArray,一维数组(数组存储每一个对阵的最大奖金或最小奖金) | |
* @param passType,过关方式,3x3,3x4... | |
* @param multiple,倍数 | |
*/ | |
this.calcCombPassBonus = function(bonusArray, passType, multiple) { | |
var bonus = 0; | |
var cLen = parseInt(passType.split("c")[0]); | |
if ( cLen == bonusArray.length ) { | |
var freeArray = combCrMap.get(passType); | |
for ( var i = 0; i < freeArray.length; i++ ) { | |
bonus += parseFloat(this.calcFreePassBonus(bonusArray, freeArray[i], multiple)); | |
} | |
} else { | |
var calcArrays = combAlg.findComb(bonusArray, bonusArray.length, cLen); | |
var freeArray = combCrMap.get(passType); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
for ( var j = 0; j < freeArray.length; j++ ) { | |
bonus += parseFloat(this.calcFreePassBonus(calcArrays[i], freeArray[j], multiple)); | |
} | |
} | |
} | |
var bns = new Number(bonus); | |
return bns.toFixed(2); | |
} | |
/** | |
* 数组降序排序函数 | |
*/ | |
this.compare = function (_val1,_val2) { | |
if ( parseFloat(_val1) < parseFloat(_val2) ) { | |
return 1; | |
} else if ( parseFloat(_val1) > parseFloat(_val2) ) { | |
return -1; | |
} else { | |
return 0; | |
} | |
} | |
/** | |
* 数组升序排序函数 | |
*/ | |
this.compareASC = function (_val1,_val2) { | |
if ( parseFloat(_val1) > parseFloat(_val2) ) { | |
return 1; | |
} else if ( parseFloat(_val1) < parseFloat(_val2) ) { | |
return -1; | |
} else { | |
return 0; | |
} | |
} | |
/** | |
* 计算奖金(最高奖金、最低奖金计算,组合过关与自由过关通用) | |
* @param bonusArray,2维数组,如:array = new Array(new Array(1.70,9.10),new Array(2.01)); | |
* @param passArray,一维数组,存放过关方式 | |
* @param multiple,倍数 | |
* @return 奖金 | |
*/ | |
this.calcBonus0 = function(bonusArray, passArray, multiple) { | |
var calcArray = new Array(); | |
for ( var i = 0; i < bonusArray.length; i++ ) { | |
bonusArray[i].sort(this.compare); | |
calcArray.push(bonusArray[i][0]); | |
} | |
var bonus = 0; | |
for ( var i = 0; i < passArray.length; i++ ) { | |
if ( parseInt(passArray[i].split("c")[1]) > 1 ) { | |
bonus += parseFloat(this.calcCombPassBonus(calcArray, passArray[i], multiple)); | |
} else { | |
bonus += parseFloat(this.calcFreePassBonus(calcArray, passArray[i], multiple)); | |
} | |
} | |
var bns = new Number(bonus); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算单关最小奖金 | |
*/ | |
this.calcDgMinBonus = function(betCode, multiple) { | |
var codes = betCode.split("|"); | |
var minArray = new Array(); | |
for ( var i = 0; i < codes.length; i++ ) { | |
var slist = this.toSingleCode(codes[i].split(":")[1]); | |
var bets = codes[i].split(":")[1].split(","); | |
var od = 0; | |
od = parseFloat(this.getBetOdds(codes[i].split(":")[0],bets[0])); | |
for ( var oo = 0; oo < bets.length; oo++ ) { | |
if ( parseFloat(this.getBetOdds(codes[i].split(":")[0],bets[oo])) < od ) { | |
od = parseFloat(this.getBetOdds(codes[i].split(":")[0],bets[oo])); | |
} | |
} | |
minArray.push(od); | |
} | |
minArray.sort(this.compareASC); | |
var bns = new Number(minArray[0]*multiple*2); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算最小奖金,最小过关数的最低赔率 | |
*/ | |
this.calcMinBonus = function(betCode, passString, multiple) { | |
if ( passString == "1c1" ) { | |
return this.calcDgMinBonus(betCode, multiple); | |
} | |
var pts = passString.split(","); | |
var pass = 8; // 从2串1开始 | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( pts[i].split("c")[1] != "1" ) { | |
var parray = combCrMap.get(pts[i]); | |
if ( parseInt(parray[parray.length-1].split("c")[0],10) < pass ) { | |
pass = parseInt(parray[parray.length-1].split("c")[0],10); | |
} | |
} else { | |
if ( parseInt(pts[i].split("c")[0],10) < pass ) { | |
pass = parseInt(pts[i].split("c")[0],10) | |
} | |
} | |
} | |
var codes = betCode.split("|"); | |
var minArray = new Array(); | |
for ( var i = 0; i < codes.length; i++ ) { | |
var slist = this.toSingleCode(codes[i].split(":")[1]); | |
var bets = codes[i].split(":")[1].split(","); | |
var od = 0; | |
od = parseFloat(this.getBetOdds(codes[i].split(":")[0],bets[0])); | |
for ( var oo = 0; oo < bets.length; oo++ ) { | |
if ( parseFloat(this.getBetOdds(codes[i].split(":")[0],bets[oo])) < od ) { | |
od = parseFloat(this.getBetOdds(codes[i].split(":")[0],bets[oo])); | |
} | |
} | |
minArray.push(od); | |
} | |
var bonus = 1; | |
minArray.sort(this.compareASC); | |
for ( var i = 0; i < pass; i++ ) { | |
bonus *= minArray[i]; | |
} | |
bonus *= 2; | |
bonus = this.limitedBonus(pass, bonus); | |
var bns = new Number(bonus*multiple); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算单关奖金 | |
*/ | |
this.calcDgBonus = function(betCode, multiple) { | |
var bonus = 0; | |
//if ( this.playId == 6 ) { | |
var codes = betCode.split("|"); | |
for ( var i = 0; i < codes.length; i++ ) { | |
var slist = this.toSingleCode(codes[i].split(":")[1]); | |
for ( var j = 0; j < slist.length; j++ ) { | |
// 找出单玩法的最大赔率值 | |
var od = 0; | |
var ods = slist[j].split(","); | |
od = parseFloat(this.getBetOdds(codes[i].split(":")[0],ods[0])); | |
for ( var oo = 0; oo < ods.length; oo++ ) { | |
if ( parseFloat(this.getBetOdds(codes[i].split(":")[0],ods[oo])) > od ) { | |
od = parseFloat(this.getBetOdds(codes[i].split(":")[0],ods[oo])); | |
} | |
} | |
bonus += od; | |
} | |
} | |
//} | |
var bns = new Number(bonus*multiple*2); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算奖金,页面统一调用此方法计算 | |
* @param betCode,投注码:20140402001:3,1:0|20140402002:3,1:0 | |
* @param passString,过关方式串:"2c1,3c1" | |
* @param multiple,倍数 | |
* @return 奖金 | |
*/ | |
this.calcBonus = function(betCode, passString, multiple) { | |
if ( passString == "1c1" ) { | |
return this.calcDgBonus(betCode, multiple); | |
} | |
if ( this.playId == 6 ) { | |
// 混合过关 | |
betCode = this.filteMutexs(betCode, 1); | |
} | |
var bets = betCode.split("|"); | |
var pts = passString.split(","); | |
var passArray = new Array(); | |
for ( var i = 0; i < pts.length; i++ ) { | |
passArray.push(pts[i]); | |
} | |
var bonusArray = new Array(); | |
var bonusDanArray = new Array(); | |
if ( this.playId != 6 ) { | |
for ( var i = 0; i < bets.length; i++ ) { | |
var pbts = bets[i].split(":"); | |
var aps = pbts[1].split(","); | |
var subArray = new Array(); | |
for ( var j = 0; j < aps.length; j++ ) { | |
subArray.push(this.getBetOdds(pbts[0], aps[j])); | |
} | |
if ( pbts[2] == "2") { | |
// 胆 | |
bonusDanArray.push(subArray); | |
} else { | |
bonusArray.push(subArray); | |
} | |
} | |
var bonus = 0; | |
if ( bonusDanArray.length == 0 ) { | |
bonus = this.calcBonus0(bonusArray, passArray, multiple); | |
} else { | |
bonus = this.calcDanTuoBonus(bonusDanArray, bonusArray, passArray, multiple); | |
} | |
} else { | |
for ( var i = 0; i < bets.length; i++ ) { | |
var subBetArray = new Array(); | |
var pointerArray = new Array(); | |
var pbts = bets[i].split(":")[1].split(","); | |
var pointer = pbts[0].split("-")[0];; | |
for ( var j = 0; j < pbts.length; j++ ) { | |
if ( pointer != pbts[j].split("-")[0]) { | |
var nArray = new Array(); | |
for ( var k = 0; k < pointerArray.length; k++ ) { | |
nArray.push(pointerArray[k]); | |
} | |
subBetArray.push(nArray); | |
pointer = pbts[j].split("-")[0]; | |
pointerArray = new Array(); | |
pointerArray.push(this.getBetOdds(bets[i].split(":")[0], pbts[j])); | |
if ( j == pbts.length - 1) { | |
var nArray = new Array(); | |
for ( var k = 0; k < pointerArray.length; k++ ) { | |
nArray.push(pointerArray[k]); | |
} | |
subBetArray.push(nArray); | |
} | |
} else { | |
pointerArray.push(this.getBetOdds(bets[i].split(":")[0], pbts[j])); | |
if ( j == pbts.length - 1) { | |
var nArray = new Array(); | |
for ( var k = 0; k < pointerArray.length; k++ ) { | |
nArray.push(pointerArray[k]); | |
} | |
subBetArray.push(nArray); | |
} | |
} | |
} | |
if ( bets[i].split(":")[2] == "2") { | |
// 胆 | |
bonusDanArray.push(subBetArray); | |
} else { | |
bonusArray.push(subBetArray); | |
} | |
} | |
if ( bonusDanArray.length == 0 ) { | |
bonus = this.calcMixedMaxBonus(bonusArray, passArray, multiple); | |
} else { | |
bonus = this.calcMixedDanTuoMaxBonus(bonusDanArray, bonusArray, passArray, multiple); | |
} | |
} | |
return bonus; | |
} | |
/** | |
* 计算胆拖奖金(最高奖金、最低奖金计算,胆拖只支持自由过关),页面统一调用此方法计算 | |
* @param bonusDanArray,2维数组,如:array = new Array(new Array(1.70,9.10),new Array(2.01)); | |
* @param bonusTuoArray,2维数组,如:array = new Array(new Array(1.70,9.10),new Array(2.01)); | |
* @param passArray,一维数组,存放过关方式 | |
* @return 注数 | |
*/ | |
this.calcDanTuoBonus = function(bonusDanArray, bonusTuoArray, passArray, multiple) { | |
var bonus = 0; | |
var danCalcArray = new Array(); | |
for ( var i = 0; i < bonusDanArray.length; i++ ) { | |
bonusDanArray[i].sort(this.compare); | |
danCalcArray.push(bonusDanArray[i][0]); | |
} | |
var tuoCalcArray = new Array(); | |
for ( var i = 0; i < bonusTuoArray.length; i++ ) { | |
bonusTuoArray[i].sort(this.compare); | |
tuoCalcArray.push(bonusTuoArray[i][0]); | |
} | |
for ( var i = 0; i < passArray.length; i++ ) { | |
var cLen = parseInt(passArray[i].split("c")[0]); | |
var calcArrays = combAlg.findComb(tuoCalcArray, tuoCalcArray.length, cLen - danCalcArray.length); | |
for ( var k = 0; k < calcArrays.length; k++ ) { | |
var betN = 1; | |
for ( var j = 0; j < calcArrays[k].length; j++ ) { | |
betN *= parseFloat(calcArrays[k][j]); | |
} | |
for ( var j = 0; j < danCalcArray.length; j++ ) { | |
betN *= parseFloat(danCalcArray[j]); | |
} | |
bonus += betN; | |
} | |
} | |
var bns = new Number(bonus * 2 * multiple); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算混合过关注数(组合过关与自由过关通用) | |
* @param betArray,彩果,3维数组 new Array(new Array(new Array("1-3"),new Array("2-3","2-1")),new Array(new Array("1-3"),new Array("2-1"))) | |
* @param passArray,一维数组,存放过关方式 | |
* @return 注数 | |
*/ | |
this.calcMixedBetNum = function(betArray, passArray) { | |
var betNum = 0; | |
for ( var i = 0; i < passArray.length; i++ ) { | |
var cLen = parseInt(passArray[i].split("c")[0]); | |
var combArray = combAlg.findComb(betArray, betArray.length, cLen); | |
for ( var j = 0; j < combArray.length; j++ ) { | |
var splitArray = combAlg.findNmComb(combArray[j]); | |
for ( var k = 0; k < splitArray.length; k++ ) { | |
//betNum += this.calcBetNum(splitArray[i], passArray); | |
if ( parseInt(passArray[i].split("c")[1]) > 1 ) { | |
betNum += this.calcCombPassNum(splitArray[k], passArray[i]); | |
} else { | |
betNum += this.calcFreePassNum(splitArray[k], passArray[i]); | |
} | |
} | |
} | |
} | |
return betNum; | |
} | |
/** | |
* 计算混合过关胆拖注数(胆拖只支持自由过关),页面统一调用此方法计算 | |
* @param danBetArray,胆彩果,三维数组 new Array(new Array("1-3"),new Array("1-3","2-1"),new Array("1-3","1-1","1-0")) | |
* @param tuoBetArray,拖,三维数组 new Array(new Array("3-3"),new Array("1-3","1-1")) | |
* @param passArray,一维数组,存放过关方式 | |
* @return 注数 | |
*/ | |
this.calcMixedDanTuoBetNum = function(danBetArray, tuoBetArray, passArray) { | |
var betNum = 0; | |
var danSplitArray = combAlg.findNmComb(danBetArray); | |
for ( var k = 0; k < passArray.length; k++ ) { | |
var cLen = parseInt(passArray[k].split("c")[0]); | |
var calcArrays = combAlg.findComb(tuoBetArray, tuoBetArray.length, cLen - danBetArray.length); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
var splitArray = combAlg.findNmComb(calcArrays[i]); | |
for ( var kk = 0; kk < splitArray.length; kk++ ) { | |
var betN = 1; | |
for ( var j = 0; j < splitArray[kk].length; j++ ) { | |
betN *= splitArray[kk][j].length; | |
} | |
for ( var j = 0; j < danSplitArray.length; j++ ) { | |
var betM = betN; | |
for ( var jj = 0; jj < danSplitArray[j].length; jj++ ) { | |
betM *= danSplitArray[j][jj].length; | |
} | |
betNum += betM; | |
} | |
} | |
} | |
} | |
return betNum; | |
} | |
/** | |
* 计算混合过关最大奖金,最小奖金计算通用 | |
* @param betBonusArray,奖金数组,三维数组 | |
* @param passArray,一维数组,存放过关方式 | |
* @param multiple,倍数 | |
*/ | |
this.calcMixedMaxBonus = function(betBonusArray, passArray, multiple) { | |
var bonus = 0; | |
for ( var i = 0; i < passArray.length; i++ ) { | |
var cLen = parseInt(passArray[i].split("c")[0]); | |
var combArray = combAlg.findComb(betBonusArray, betBonusArray.length, cLen); | |
for ( var j = 0; j < combArray.length; j++ ) { | |
var splitArray = combAlg.findNmComb(combArray[j]); | |
for ( var k = 0; k < splitArray.length; k++ ) { | |
var calcArray = new Array(); | |
for ( var kk = 0; kk < splitArray[k].length; kk++ ) { | |
splitArray[k][kk].sort(this.compare); | |
calcArray.push(splitArray[k][kk][0]); | |
} | |
if ( parseInt(passArray[i].split("c")[1]) > 1 ) { | |
bonus += parseFloat(this.calcCombPassBonus(calcArray, passArray[i], multiple)); | |
} else { | |
bonus += parseFloat(this.calcFreePassBonus(calcArray, passArray[i], multiple)); | |
} | |
} | |
} | |
} | |
var bns = new Number(bonus); | |
return bns.toFixed(2); | |
} | |
/** | |
* 计算混合过关胆拖最大奖金,最小奖金计算通用(只有自由过关) | |
* @param betDanBonusArray,胆码奖金数组,三维数组 | |
* @param betTuoBonusArray,拖码奖金数组,三维数组 | |
* @param passArray,一维数组,存放过关方式 | |
* @param multiple,倍数 | |
*/ | |
this.calcMixedDanTuoMaxBonus = function(betDanBonusArray, betTuoBonusArray, passArray, multiple) { | |
var bonus = 0; | |
var danSplitArray = combAlg.findNmComb(betDanBonusArray); | |
for ( var k = 0; k < passArray.length; k++ ) { | |
var cLen = parseInt(passArray[k].split("c")[0]); | |
var calcArrays = combAlg.findComb(betTuoBonusArray, betTuoBonusArray.length, cLen - betDanBonusArray.length); | |
for ( var i = 0; i < calcArrays.length; i++ ) { | |
var splitArray = combAlg.findNmComb(calcArrays[i]); | |
for ( var kk = 0; kk < splitArray.length; kk++ ) { | |
var calcArray = new Array(); | |
for ( var kkk = 0; kkk < splitArray[kk].length; kkk++ ) { | |
splitArray[kk][kkk].sort(this.compare); | |
calcArray.push(splitArray[kk][kkk][0]); | |
} | |
var betN = 1; | |
for ( var j = 0; j < calcArray.length; j++ ) { | |
betN *= parseFloat(calcArray[j]); | |
} | |
for ( var j = 0; j < danSplitArray.length; j++ ) { | |
var betM = betN; | |
for ( var jj = 0; jj < danSplitArray[j].length; jj++ ) { | |
danSplitArray[j][jj].sort(this.compare); | |
betM *= parseFloat(danSplitArray[j][jj][0]); | |
} | |
bonus += betM; | |
} | |
} | |
} | |
} | |
var bns = new Number(bonus * 2 * multiple); | |
return bns.toFixed(2); | |
} | |
/** | |
* 复式投注号码转换成单式号码,只支持自由过关 | |
* @param betCode,投注号码 20140402001:3,1:0|20140402001:3:0 | |
* 转换之后:--> 20140402001:3:0|20140402001:3:0 | |
* 20140402001:1:0|20140402001:3:0 | |
* @param passString,过关方式串 "2c1,3c1" | |
* | |
* @return 返回一维数组,格式:20140402001:1:0|20140402001:3:0 | |
*/ | |
this.tsfCmp2Sngl = function(betCode, passString) { | |
var bets = betCode.split("|"); | |
var codeArray = new Array(); | |
var dan = 0; | |
for ( var i = 0; i < bets.length; i++ ) { | |
var subArray = new Array(); | |
var split = bets[i].split(":"); | |
var codes = split[1].split(","); | |
for ( var j = 0; j < codes.length; j++ ) { | |
subArray.push(split[0] + ":" + codes[j] + ":"+split[2]); | |
} | |
if ( split[2] == "2" ) { | |
dan++; | |
} | |
codeArray.push(subArray); | |
} | |
var retArray = new Array(); | |
var pts = passString.split(","); | |
for ( var i = 0; i < pts.length; i++ ) { | |
var cLen = parseInt(pts[i].split("c")[0]); | |
var calcArrays = combAlg.findComb(codeArray, codeArray.length, cLen); | |
for ( var j = 0; j < calcArrays.length; j++ ) { | |
var splitArray = combAlg.findNmComb(calcArrays[j]); | |
for ( var k = 0; k < splitArray.length; k++ ) { | |
var releaseCode = ""; | |
for ( var kk = 0; kk < splitArray[k].length; kk++ ) { | |
releaseCode += splitArray[k][kk] + "|"; | |
} | |
releaseCode = releaseCode.substring(0, releaseCode.length - 1); | |
retArray.push(releaseCode); | |
} | |
} | |
} | |
if ( dan == 0 ) { | |
return retArray; | |
} else { | |
var danArray = new Array(); | |
for ( var i = 0; i < retArray.length; i++ ) { | |
var sd = 0; | |
var split = retArray[i].split("|"); | |
for ( var j = 0; j < split.length; j++ ) { | |
if ( split[j].split(":")[2] == "2") { | |
sd++; | |
} | |
} | |
if ( sd == dan ) { | |
danArray.push(retArray[i]); | |
} | |
} | |
return danArray; | |
} | |
} | |
/** | |
* 混关的一关,投注码变成单一玩法 added by luochang at 2014/08/14 | |
* return list | |
*/ | |
this.toSingleCode = function(mixedCode) { | |
if ( this.playId != 6 ) { | |
return new Array(mixedCode); | |
} | |
var list = new Array(); | |
var source = ""; | |
var perCode = mixedCode.split(","); | |
for ( var i = 0; i < perCode.length; i++ ) { | |
var code = perCode[i]; | |
if ( source == "" ) { | |
source = code + ","; | |
if ( i == perCode.length - 1 ) { | |
source = source.substring(0, source.length -1 ); | |
list.push(source); | |
} | |
} else { | |
if ( parseInt(source.split(",")[0].split("-")[0]) == parseInt(code.split("-")[0]) ) { | |
source += code + ","; | |
if ( i == perCode.length - 1 ) { | |
source = source.substring(0, source.length -1 ); | |
list.push(source); | |
} | |
} else { | |
source = source.substring(0, source.length -1 ); | |
list.push(source); | |
source = code + ","; | |
if ( i == perCode.length - 1 ) { | |
source = source.substring(0, source.length -1 ); | |
list.push(source); | |
} | |
} | |
} | |
} | |
return list; | |
} | |
/** | |
* | |
* 混合过关投注码切换成每一场单一玩法(拆号) added at 2014/08/14 | |
* return list | |
*/ | |
this.splitHhCode = function(betCode) { | |
var betCodes = new Array(); | |
var ops = betCode.split("|"); | |
var before = ops[0].split(":"); | |
var codes = this.toSingleCode(before[1]); | |
for ( var i = 0; i < codes.length; i++ ) { | |
var code = codes[i]; | |
var _tArr = before[0] + ":" + code + ":"+before[2]+"|"; | |
this.findSubHhNmComb( betCodes, _tArr, ops, ops.length-1 ); | |
} | |
return betCodes; | |
} | |
this.findSubHhNmComb = function(result, tArr, ops, n) { | |
if ( n == 0 ) { | |
result.push(tArr.substring(0, tArr.length-1)); | |
} else { | |
var before = ops[ops.length-n].split(":"); | |
var codes = this.toSingleCode(before[1]); | |
for ( var i = 0; i < codes.length; i++ ) { | |
var code = codes[i]; | |
var _tArr = tArr; | |
_tArr += before[0] + ":" + code + ":"+before[2]+"|"; | |
this.findSubHhNmComb( result, _tArr, ops, n-1 ); | |
} | |
} | |
} | |
/** | |
* 生成奖金预测明细列表 added at 2014/08/14 | |
*/ | |
this.createBonusList = function(betCode, passString, multiple) { | |
if ( this.playId == 6 ) {// 组合过关奖金还存在问题 | |
return this.createMixedBonusList(betCode, passString, multiple); | |
} else { | |
return this.a(betCode, passString, multiple); | |
} | |
} | |
this.a = function(betCode, passString, multiple) { | |
var list = new Array(); | |
var pts = passString.split(","); | |
var freePs = new Array(); // 2串1到8串1 | |
var psMap = new Hashtable(); // 存储2串1~8串1对应的选择的过关方式 | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( pts[i].split("c")[1] == "1" ) { | |
var nexist = 0; | |
for ( var j = 0; j < freePs.length; j++ ) { | |
if ( freePs[j] == pts[i] ) { | |
nexist = 1; | |
break; | |
} | |
} | |
if ( nexist == 0 ) { | |
freePs.push(pts[i]); | |
var pA = new Array(); | |
pA.push(pts[i]); | |
psMap.put(pts[i], pA); | |
} | |
} else { | |
var cArray = combCrMap.get(pts[i]); | |
for ( var k = 0; k < cArray.length; k++ ) { | |
var nexist = 0; | |
for ( var j = 0; j < freePs.length; j++ ) { | |
if ( freePs[j] == cArray[k] ) { | |
nexist = 1; | |
break; | |
} | |
} | |
if ( nexist == 0 ) { | |
freePs.push(cArray[k]); | |
} | |
} | |
} | |
} | |
freePs.sort(); | |
for ( var j = 0; j < freePs.length; j++ ) { | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( parseInt(pts[i].split("c")[1]) > 1 ) { | |
if ( PPMAP.get(freePs[j]).indexOf(pts[i]) > -1 ) { | |
if ( 'undefined' != psMap.get(freePs[j]) ) { | |
var pA = psMap.get(freePs[j]); | |
pA.push(pts[i]); | |
} else { | |
var pA = new Array(); | |
pA.push(pts[i]); | |
psMap.put(freePs[j], pA); | |
} | |
} | |
} | |
} | |
} | |
var startWinSch = parseInt(freePs[0].split("c")[0]); // 命中场数 | |
var betCodes = betCode.split("|"); | |
for ( var i = startWinSch; i <= betCodes.length; i++ ) { | |
var po = new BonusYcPojo(); | |
var detailList = new Array(); | |
var detailMinList = new Array(); | |
po.winNum = i; // 命中场数 | |
po.multiple = multiple; | |
var lowestBonus = 0.0; // 最小奖金 | |
var highestBonus = 0.0; // 最高奖金 | |
var winBet = ""; | |
for ( var j = 0; j < freePs.length; j++ ) { | |
if ( parseInt(freePs[j].split("c")[0]) > i ) { | |
winBet += "0,"; | |
continue; | |
} | |
var betNum = 0; // 中奖注数 | |
// 选出最大的i个命中赔率和最小的i个命中赔率 | |
//var maxPojo = BonusCalcPojo(); | |
//var minPojo = BonusCalcPojo(); | |
var maxArray = new Array(); | |
var maxDanArray = new Array(); | |
var minArray = new Array(); | |
var minDanArray = new Array(); | |
for ( var o = 0; o < betCodes.length; o++ ) { | |
var subArray = new Array(); | |
var codeInfo = betCodes[o].split(":"); | |
var bets = codeInfo[1].split(","); | |
for ( var oo = 0; oo < bets.length; oo++ ) { | |
subArray.push(this.getBetOdds(codeInfo[0], bets[oo])); | |
} | |
subArray.sort(this.compareASC); | |
if ( codeInfo[2] == "2" ) { | |
minDanArray.push(subArray[0]); | |
} else { | |
minArray.push(subArray[0]); | |
} | |
subArray.sort(this.compare); | |
if ( codeInfo[2] == "2" ) { | |
maxDanArray.push(subArray[0]); | |
} else { | |
maxArray.push(subArray[0]); | |
} | |
} | |
maxArray.sort(this.compare); | |
minArray.sort(this.compareASC); | |
var maxB = new BonusDetail(); | |
var minB = new BonusDetail(); | |
maxB.winNum = 0; | |
minB.winNum = 0; | |
maxB.passType = freePs[j]; | |
minB.passType = freePs[j]; | |
var maxBDHtml = ""; | |
var minBDHtml = ""; | |
var subDHB = 0; | |
var subDLB = 0; | |
var pps = psMap.get(freePs[j]); | |
for ( var o = 0; o < pps.length; o++ ) { | |
if ( parseInt(pps[o].split("c")[1]) == 1 ) { // 自由过关 | |
if ( parseInt(pps[o].split("c")[0]) > i ) { | |
continue; | |
} | |
var sbetNumt = combAlg.calcCombNum(i-maxDanArray.length, parseInt(freePs[j].split("c")[0])-maxDanArray.length); | |
betNum += sbetNumt; | |
maxB.winNum += sbetNumt; | |
minB.winNum += sbetNumt; | |
var bonusHA = new Array(); | |
for ( var oo = 0; oo < maxDanArray.length; oo++ ) { | |
bonusHA.push(maxDanArray[oo]); | |
} | |
for ( var oo = 0; oo < i - maxDanArray.length; oo++ ) { | |
bonusHA.push(maxArray[oo]); | |
} | |
var calcHA = combAlg.findComb(bonusHA, i - maxDanArray.length, parseInt(freePs[j].split("c")[0]) - maxDanArray.length); | |
for ( var jj = 0; jj < calcHA.length; jj++ ) { | |
var subLB = 1; | |
for ( var jjj = 0; jjj < maxDanArray.length; jjj++ ) { | |
subLB *= parseFloat(maxDanArray[jjj]); | |
maxBDHtml += maxDanArray[jjj] + ' × '; | |
} | |
for ( var jjj = 0; jjj < calcHA[jj].length; jjj++ ) { | |
subLB *= parseFloat(calcHA[jj][jjj]); | |
maxBDHtml += calcHA[jj][jjj] + ' × '; | |
} | |
subDHB += subLB * 2 * multiple; | |
highestBonus += subLB * 2 * multiple; | |
maxBDHtml = maxBDHtml + "2 × "+multiple+"倍 = " + new Number(subLB * 2 * multiple).toFixed(2) + "元,"; | |
} | |
var bonusLA = new Array(); | |
for ( var oo = 0; oo < minDanArray.length; oo++ ) { | |
bonusLA.push(minDanArray[oo]); | |
} | |
for ( var oo = 0; oo < i - minDanArray.length; oo++ ) { | |
bonusLA.push(minArray[oo]); | |
} | |
var calcLA = combAlg.findComb(bonusLA, i - maxDanArray.length, parseInt(freePs[j].split("c")[0]) - maxDanArray.length); | |
for ( var jj = 0; jj < calcHA.length; jj++ ) { | |
var subLB = 1; | |
for ( var jjj = 0; jjj < minDanArray.length; jjj++ ) { | |
subLB *= parseFloat(minDanArray[jjj]); | |
minBDHtml += minDanArray[jjj] + ' × '; | |
} | |
for ( var jjj = 0; jjj < calcLA[jj].length; jjj++ ) { | |
subLB *= parseFloat(calcLA[jj][jjj]); | |
minBDHtml += calcLA[jj][jjj] + ' × '; | |
} | |
subDLB += subLB * 2 * multiple; | |
lowestBonus += subLB * 2 * multiple; | |
minBDHtml = minBDHtml + "2 × "+multiple+"倍 = " + new Number(subLB * 2 * multiple).toFixed(2) + "元,"; | |
} | |
} else { // 组合过关 | |
var cLen = combAlg.calcCombNum(betCodes.length - parseInt(freePs[j].split("c")[0]), parseInt(pps[o].split("c")[0]) - parseInt(freePs[j].split("c")[0])); | |
for ( var kkk = 0; kkk < cLen; kkk++ ) { | |
var sbetNumt = combAlg.calcCombNum(i-maxDanArray.length, parseInt(freePs[j].split("c")[0])-maxDanArray.length); | |
betNum += sbetNumt; | |
maxB.winNum += sbetNumt; | |
minB.winNum += sbetNumt; | |
var bonusHA = new Array(); | |
for ( var oo = 0; oo < maxDanArray.length; oo++ ) { | |
bonusHA.push(maxDanArray[oo]); | |
} | |
for ( var oo = 0; oo < i - maxDanArray.length; oo++ ) { | |
bonusHA.push(maxArray[oo]); | |
} | |
var calcHA = combAlg.findComb(bonusHA, i - maxDanArray.length, parseInt(freePs[j].split("c")[0]) - maxDanArray.length); | |
for ( var jj = 0; jj < calcHA.length; jj++ ) { | |
var subLB = 1; | |
for ( var jjj = 0; jjj < maxDanArray.length; jjj++ ) { | |
subLB *= parseFloat(maxDanArray[jjj]); | |
maxBDHtml += maxDanArray[jjj] + ' × '; | |
} | |
for ( var jjj = 0; jjj < calcHA[jj].length; jjj++ ) { | |
subLB *= parseFloat(calcHA[jj][jjj]); | |
maxBDHtml += calcHA[jj][jjj] + ' × '; | |
} | |
subDHB += subLB * 2 * multiple; | |
highestBonus += subLB * 2 * multiple; | |
maxBDHtml = maxBDHtml + "2 × "+multiple+"倍 = " + new Number(subLB * 2 * multiple).toFixed(2) + "元,"; | |
} | |
var bonusLA = new Array(); | |
for ( var oo = 0; oo < minDanArray.length; oo++ ) { | |
bonusLA.push(minDanArray[oo]); | |
} | |
for ( var oo = 0; oo < i - minDanArray.length; oo++ ) { | |
bonusLA.push(minArray[oo]); | |
} | |
var calcLA = combAlg.findComb(bonusLA, i - maxDanArray.length, parseInt(freePs[j].split("c")[0]) - maxDanArray.length); | |
for ( var jj = 0; jj < calcHA.length; jj++ ) { | |
var subLB = 1; | |
for ( var jjj = 0; jjj < minDanArray.length; jjj++ ) { | |
subLB *= parseFloat(minDanArray[jjj]); | |
minBDHtml += minDanArray[jjj] + ' × '; | |
} | |
for ( var jjj = 0; jjj < calcLA[jj].length; jjj++ ) { | |
subLB *= parseFloat(calcLA[jj][jjj]); | |
minBDHtml += calcLA[jj][jjj] + ' × '; | |
} | |
subDLB += subLB * 2 * multiple; | |
lowestBonus += subLB * 2 * multiple; | |
minBDHtml = minBDHtml + "2 × "+multiple+"倍 = " + new Number(subLB * 2 * multiple).toFixed(2) + "元,"; | |
} | |
} | |
} | |
} | |
maxBDHtml = maxBDHtml.substring(0, maxBDHtml.length - 1); | |
maxB.bonus = subDHB; | |
maxB.bonusDetail = maxBDHtml; | |
detailList.push(maxB); | |
minBDHtml = minBDHtml.substring(0, minBDHtml.length - 1); | |
minB.bonus = subDLB; | |
minB.bonusDetail = minBDHtml; | |
detailMinList.push(minB); | |
winBet += betNum + ","; | |
} | |
winBet = winBet.substring(0, winBet.length - 1); | |
po.winBet = winBet; | |
var _bnsl = new Number(lowestBonus); | |
var _bnsh = new Number(highestBonus); | |
po.maxBonus = _bnsh.toFixed(2); | |
po.minBonus = _bnsl.toFixed(2); | |
po.passArray = freePs; | |
po.bonusMaxDetailArray = detailList; | |
po.bonusMinDetailArray = detailMinList; | |
list.push(po); | |
} | |
return list; | |
} | |
/** | |
* 生成混合玩法预测奖金详情列表 Added at 2014/08/14 | |
* @param betCode,投注码 | |
* @param passString,投注串 | |
* @param multiple,倍数 | |
*/ | |
this.createMixedBonusList = function(betCode, passString, multiple) { | |
var list = new Array(); | |
var pts = passString.split(","); | |
var freePs = new Array(); // 2串1到8串1 | |
var psMap = new Hashtable(); // 存储2串1~8串1对应的选择的过关方式 | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( pts[i].split("c")[1] == "1" ) { | |
var nexist = 0; | |
for ( var j = 0; j < freePs.length; j++ ) { | |
if ( freePs[j] == pts[i] ) { | |
nexist = 1; | |
break; | |
} | |
} | |
if ( nexist == 0 ) { | |
freePs.push(pts[i]); | |
var pA = new Array(); | |
pA.push(pts[i]); | |
psMap.put(pts[i], pA); | |
} | |
} else { | |
var cArray = combCrMap.get(pts[i]); | |
for ( var k = 0; k < cArray.length; k++ ) { | |
var nexist = 0; | |
for ( var j = 0; j < freePs.length; j++ ) { | |
if ( freePs[j] == cArray[k] ) { | |
nexist = 1; | |
break; | |
} | |
} | |
if ( nexist == 0 ) { | |
freePs.push(cArray[k]); | |
} | |
} | |
} | |
} | |
freePs.sort(); | |
for ( var j = 0; j < freePs.length; j++ ) { | |
for ( var i = 0; i < pts.length; i++ ) { | |
if ( parseInt(pts[i].split("c")[1]) > 1 ) { | |
if ( PPMAP.get(freePs[j]).indexOf(pts[i]) > -1 ) { | |
if ( 'undefined' != psMap.get(freePs[j]) ) { | |
var pA = psMap.get(freePs[j]); | |
pA.push(pts[i]); | |
} else { | |
var pA = new Array(); | |
pA.push(pts[i]); | |
psMap.put(freePs[j], pA); | |
} | |
} | |
} | |
} | |
} | |
var startWinSch = parseInt(freePs[0].split("c")[0]); // 命中场数 | |
betCode = this.filteMutexs(betCode, 1); | |
var betCodes = betCode.split("|"); | |
var oddsArray = new Array(); | |
var oddsDanArray = new Array(); | |
for ( var i = 0; i < betCodes.length; i++ ) { | |
var subOddsArray = new Array(); | |
var oods = this.toSingleCode(betCodes[i].split(":")[1]); | |
for ( var j = 0; j < oods.length; j++ ) { | |
var pbts = oods[j].split(","); | |
var ssArray = new Array(); | |
for ( var jj = 0; jj < pbts.length; jj++ ) { | |
ssArray.push(this.getBetOdds(betCodes[i].split(":")[0], pbts[jj])); | |
} | |
subOddsArray.push(ssArray); | |
} | |
if ( betCodes[i].split(":")[2] == "2" ) { | |
oddsDanArray.push(subOddsArray); | |
} else { | |
oddsArray.push(subOddsArray); | |
} | |
} | |
// 赔率从大到小排序 | |
for ( var i = 0; i < oddsArray.length; i++ ) { | |
for ( var j = i + 1; j < oddsArray.length; j++ ) { | |
// 取出oddsArray[i]和oddsArray[j]的最大赔率 | |
var oddi = 0, oddj = 0; | |
for ( var o = 0; o < oddsArray[i].length; o++ ) { | |
for ( var oo = 0; oo < oddsArray[i][o].length; oo++ ) { | |
if ( parseFloat(oddsArray[i][o][oo]) > oddi ) { | |
oddi = parseFloat(oddsArray[i][o][oo]); | |
} | |
} | |
} | |
for ( var o = 0; o < oddsArray[j].length; o++ ) { | |
for ( var oo = 0; oo < oddsArray[j][o].length; oo++ ) { | |
if ( parseFloat(oddsArray[j][o][oo]) > oddi ) { | |
oddj = parseFloat(oddsArray[j][o][oo]); | |
} | |
} | |
} | |
if ( oddi < oddj ) { | |
var tm = oddsArray[i]; | |
oddsArray[i] = oddsArray[j]; | |
oddsArray[j] = tm; | |
} | |
} | |
} | |
for ( var i = startWinSch; i <= betCodes.length; i++ ) { | |
var po = new BonusYcPojo(); | |
var detailList = new Array(); | |
var detailMinList = new Array(); | |
po.winNum = i; // 命中场数 | |
po.multiple = multiple; | |
var lowestBonus = 0.0; // 最小奖金 | |
var highestBonus = 0.0; // 最高奖金 | |
var winBet = ""; | |
for ( var j = 0; j < freePs.length; j++ ) { | |
if ( parseInt(freePs[j].split("c")[0]) > i ) { | |
winBet += "0,"; | |
continue; | |
} | |
var betNum = 0; // 中奖注数 | |
// 选出最大的i个命中赔率和最小的i个命中赔率 | |
//var maxPojo = BonusCalcPojo(); | |
//var minPojo = BonusCalcPojo(); | |
var maxArray = new Array(); | |
var maxDanArray = new Array(); | |
var minArray = new Array(); | |
var minDanArray = new Array(); | |
for ( var o = 0; o < betCodes.length; o++ ) {} | |
maxArray.sort(this.compare); | |
minArray.sort(this.compareASC); | |
var maxB = new BonusDetail(); | |
var minB = new BonusDetail(); | |
maxB.winNum = 0; | |
minB.winNum = 0; | |
maxB.passType = freePs[j]; | |
minB.passType = freePs[j]; | |
var maxBDHtml = ""; | |
var minBDHtml = ""; | |
var subDHB = 0; | |
var subDLB = 0; | |
var pps = psMap.get(freePs[j]); | |
for ( var o = 0; o < pps.length; o++ ) { | |
if ( parseInt(pps[o].split("c")[1]) == 1 ) { // 自由过关 | |
if ( parseInt(pps[o].split("c")[0]) > i ) { | |
continue; | |
} | |
var cLen = parseInt(pps[o].split("c")[0]); | |
var _oddsArray = new Array(); | |
for ( var oo = 0; oo < i - oddsDanArray.length; oo++ ) { | |
_oddsArray.push(oddsArray[oo]); | |
} | |
var danSplitArray = combAlg.findNmComb(oddsDanArray); | |
var combArray = combAlg.findComb(_oddsArray, _oddsArray.length, cLen - oddsDanArray.length); | |
for ( var oo = 0; oo < combArray.length; oo++ ) { | |
var splitArray = combAlg.findNmComb(combArray[oo]); | |
for ( ooo = 0; ooo < splitArray.length; ooo++ ) { | |
betNum++; | |
maxB.winNum++; | |
minB.winNum++; | |
var bonusHA = new Array(); | |
var bonusLA = new Array(); | |
for ( var kkk = 0; kkk < splitArray[ooo].length; kkk++ ) { | |
splitArray[ooo][kkk].sort(this.compare); | |
bonusHA.push(splitArray[ooo][kkk][0]); | |
splitArray[ooo][kkk].sort(this.compareASC); | |
bonusLA.push(splitArray[ooo][kkk][0]); | |
} | |
var betN = 1; | |
for ( var kkk = 0; kkk < bonusHA.length; kkk++ ) { | |
betN *= parseFloat(bonusHA[kkk]); | |
maxBDHtml += bonusHA[kkk] + ' × '; | |
} | |
var betM = betN; | |
for ( var kkk = 0; kkk < danSplitArray.length; kkk++ ) { | |
for ( var jj = 0; jj < danSplitArray[kkk].length; jj++ ) { | |
danSplitArray[kkk][jj].sort(this.compare); | |
betM *= parseFloat(danSplitArray[kkk][jj][0]); | |
maxBDHtml += danSplitArray[kkk][jj][0] + ' × '; | |
} | |
} | |
subDHB += betM * 2 * multiple; | |
highestBonus += betM * 2 * multiple; | |
maxBDHtml = maxBDHtml + "2 × "+multiple+"倍 = " + new Number(betM * 2 * multiple).toFixed(2) + "元,"; | |
betN = 1; | |
for ( var kkk = 0; kkk < bonusLA.length; kkk++ ) { | |
betN *= parseFloat(bonusLA[kkk]); | |
minBDHtml += bonusLA[kkk] + ' × '; | |
} | |
betM = betN; | |
for ( var kkk = 0; kkk < danSplitArray.length; kkk++ ) { | |
for ( var jj = 0; jj < danSplitArray[kkk].length; jj++ ) { | |
danSplitArray[kkk][jj].sort(this.compareASC); | |
betM *= parseFloat(danSplitArray[kkk][jj][0]); | |
minBDHtml += danSplitArray[kkk][jj][0] + ' × '; | |
} | |
} | |
subDLB += betM * 2 * multiple; | |
lowestBonus += betM * 2 * multiple; | |
minBDHtml = minBDHtml + "2 × "+multiple+"倍 = " + new Number(betM * 2 * multiple).toFixed(2) + "元,"; | |
} | |
} | |
} else { // 组合过关计算 | |
var cLen = parseInt(pps[o].split("c")[0]); | |
var _combArray = combAlg.findComb(oddsArray, oddsArray.length, cLen); | |
for ( var _oo = 0; _oo < _combArray.length; _oo++ ) { | |
var _splitArray = combAlg.findNmComb(_combArray[_oo]); | |
//var ccLen = combAlg.calcCombNum(i, parseInt(freePs[j].split("c")[0])); | |
//for ( var ok = 0; ok < ccLen; ok++ ) { | |
for ( var okk = 0; okk < _splitArray.length; okk++ ) { | |
var bonusHA = new Array(); | |
var bonusLA = new Array(); | |
var llen = _splitArray[okk].length > i ? i : _splitArray[okk].length; | |
for ( var kk = 0; kk < llen; kk++ ) { | |
_splitArray[okk][kk].sort(this.compare); | |
bonusHA.push(_splitArray[okk][kk][0]); | |
_splitArray[okk][kk].sort(this.compareASC); | |
bonusLA.push(_splitArray[okk][kk][0]); | |
} | |
var calcHA = combAlg.findComb(bonusHA, bonusHA.length, parseInt(freePs[j].split("c")[0])); | |
for ( var oko = 0 ; oko < calcHA.length; oko++ ) { | |
betNum++; | |
maxB.winNum++; | |
minB.winNum++; | |
var betN = 1; | |
for ( var kkk = 0; kkk < calcHA[oko].length; kkk++ ) { | |
betN *= parseFloat(calcHA[oko][kkk]); | |
maxBDHtml += calcHA[oko][kkk] + ' × '; | |
} | |
var betM = betN; | |
subDHB += betM * 2 * multiple; | |
highestBonus += betM * 2 * multiple; | |
maxBDHtml = maxBDHtml + "2 × "+multiple+"倍 = " + new Number(betM * 2 * multiple).toFixed(2) + "元,"; | |
} | |
var calcLA = combAlg.findComb(bonusLA, bonusLA.length, parseInt(freePs[j].split("c")[0])); | |
for ( var oko = 0 ; oko < calcHA.length; oko++ ) { | |
var betN = 1; | |
for ( var kkk = 0; kkk < calcHA[oko].length; kkk++ ) { | |
betN *= parseFloat(calcHA[oko][kkk]); | |
minBDHtml += calcHA[oko][kkk] + ' × '; | |
} | |
var betM = betN; | |
subDLB += betM * 2 * multiple; | |
lowestBonus += betM * 2 * multiple; | |
minBDHtml = minBDHtml + "2 × "+multiple+"倍 = " + new Number(betM * 2 * multiple).toFixed(2) + "元,"; | |
} } | |
//} | |
} | |
} | |
} | |
maxBDHtml = maxBDHtml.substring(0, maxBDHtml.length - 1); | |
maxB.bonus = subDHB; | |
maxB.bonusDetail = maxBDHtml; | |
detailList.push(maxB); | |
minBDHtml = minBDHtml.substring(0, minBDHtml.length - 1); | |
minB.bonus = subDLB; | |
minB.bonusDetail = minBDHtml; | |
detailMinList.push(minB); | |
winBet += betNum + ","; | |
} | |
winBet = winBet.substring(0, winBet.length - 1); | |
po.winBet = winBet; | |
var _bnsl = new Number(lowestBonus); | |
var _bnsh = new Number(highestBonus); | |
po.maxBonus = _bnsh.toFixed(2); | |
po.minBonus = _bnsl.toFixed(2); | |
po.passArray = freePs; | |
po.bonusMaxDetailArray = detailList; | |
po.bonusMinDetailArray = detailMinList; | |
list.push(po); | |
} | |
return list; | |
} | |
/** | |
* 生成单一玩法预测奖金详情列表 Added at 2014/04/10 | |
* @param betCode,投注码 | |
* @param passString,投注串 | |
* @param multiple,倍数 | |
*/ | |
this.createSingleBonusList = function(betCode, passString, multiple) {} | |
/** | |
* 生成奖金优化单, Optimization类对象 | |
* @param betCode,投注码 | |
* @param passString,过关串 | |
*/ | |
this.createOptList = function(betCode, passString) { | |
var codeList = this.tsfCmp2Sngl(betCode, passString); | |
var retList = new Array(); | |
for ( var i = 0; i < codeList.length; i++ ) { | |
var om = new Optimization(); | |
var cInfo = codeList[i].split("|"); | |
var bonus = 1; | |
for ( var j = 0; j < cInfo.length; j++ ) { | |
var ccInfo = cInfo[j].split(":"); | |
bonus *= parseFloat(this.getBetOdds(ccInfo[0], ccInfo[1])); | |
} | |
bonus = parseFloat(new Number(bonus*2).toFixed(2)); | |
om.baseBonus = bonus; | |
om.betCode = codeList[i]; | |
om.multiple = 1; | |
retList.push(om); | |
} | |
return retList; | |
} | |
/** | |
* 平均优化 | |
* @param list,待优化的列表,Optimization对象 | |
* @param betMoney,投入金额 | |
*/ | |
this.averOptimize = function(list, betMoney) { | |
if ( betMoney <= list.length * 2 ) { | |
return list;// 投入金额小于基本注数,不做优化 | |
} | |
// 找到最大奖金 | |
var maxBonus = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].baseBonus > maxBonus ) { | |
maxBonus = list[i].baseBonus; | |
} | |
} | |
var baseMultCalc = 100; | |
if ( parseInt(betMoney) >= 10000 ) { | |
baseMultCalc = 1000; | |
} else if ( parseInt(betMoney) >= 100000 ) { | |
baseMultCalc = 10000; | |
} else if ( parseInt(betMoney) >= 1000000 ) { | |
baseMultCalc = 100000; | |
} | |
var mult = new Array(); | |
for ( var i = 0; i < list.length; i++ ) { | |
mult[i] = Math.round((maxBonus / list[i].baseBonus) * baseMultCalc); | |
} | |
var baseDiv = 0; | |
for ( var i = 0; i < mult.length; i++ ) { | |
baseDiv += mult[i]; | |
} | |
var base = parseFloat(parseInt(betMoney)/(baseDiv*2)); | |
var totalNum = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
list[i].multiple = Math.round(base*mult[i]); | |
if ( list[i].multiple == 0 ) { | |
list[i].multiple = 1; | |
} | |
totalNum += list[i].multiple; | |
} | |
var initialNum = parseInt(betMoney)/2; | |
if ( initialNum > totalNum ) { | |
while ( initialNum > totalNum ) { | |
// 找到最小金额的投注 | |
var minBonus = parseFloat(list[0].baseBonus*list[0].multiple); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus < minBonus ) { | |
minBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus == minBonus ) { | |
list[i].multiple = list[i].multiple + 1; | |
totalNum++; | |
break; | |
} | |
} | |
} | |
} else if ( initialNum < totalNum ) { | |
while ( initialNum < totalNum ) { | |
// 找到最大金额的投注 | |
/*var maxBonus = parseFloat(list[0].baseBonus*list[0].multiple); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( (bonus > maxBonus) ) { | |
maxBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus == maxBonus ) { | |
list[i].multiple = list[i].multiple - 1; | |
totalNum--; | |
} | |
}*/ | |
var maxBonus = list[0].multiple; | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( (list[i].multiple > maxBonus) ) { | |
maxBonus = list[i].multiple; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].multiple == maxBonus ) { | |
list[i].multiple = list[i].multiple - 1; | |
totalNum--; | |
break; | |
} | |
} | |
} | |
} | |
return list; | |
} | |
/** | |
* 博热优化 | |
* @param list,待优化的列表,Optimization对象 | |
* @param betMoney,投入金额 | |
*/ | |
this.hotOptimize = function(list, betMoney) { | |
if ( betMoney <= list.length * 2 ) { | |
return list;// 投入金额小于基本注数,不做优化 | |
} | |
var betNum = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat((list[i]).baseBonus); | |
if ( bonus < betMoney ) { | |
var multiple = parseInt(betMoney / bonus) + 1; | |
betNum += multiple; | |
list[i].multiple = multiple; | |
} else { | |
betNum++; | |
list[i].multiple = 1; | |
} | |
} | |
// 找到最小金额的投注 | |
var minBonus = parseFloat(list[0].baseBonus); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus); | |
if ( bonus < minBonus ) { | |
minBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus); | |
if ( bonus == minBonus ) { | |
var balNum = parseInt(betMoney)/2 - betNum; | |
list[i].multiple = list[i].multiple + balNum; | |
break; | |
} | |
} | |
return list; | |
} | |
/** | |
* 博冷优化 | |
* @param list,待优化的列表,Optimization对象 | |
* @param betMoney,投入金额 | |
*/ | |
this.coldOptimize = function(list, betMoney) { | |
if ( betMoney <= list.length * 2 ) { | |
return list;// 投入金额小于基本注数,不做优化 | |
} | |
var betNum = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat((list[i]).baseBonus); | |
if ( bonus < betMoney ) { | |
var multiple = parseInt(betMoney / bonus) + 1; | |
betNum += multiple; | |
list[i].multiple = multiple; | |
} else { | |
betNum++; | |
list[i].multiple = 1; | |
} | |
} | |
// 找到最大奖金的投注 | |
var minBonus = parseFloat(list[0].baseBonus); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus); | |
if ( bonus > minBonus ) { | |
minBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus); | |
if ( bonus == minBonus ) { | |
var balNum = parseInt(betMoney)/2 - betNum; | |
list[i].multiple = list[i].multiple + balNum; | |
break; | |
} | |
} | |
return list; | |
} | |
/** | |
* 保本优化 | |
* @param list,待优化的列表,Optimization对象 | |
* @param betMoney,投入金额 | |
*/ | |
this.evenOptimize = function(list, betMoney) { | |
if ( betMoney <= list.length * 2 ) { | |
return list;// 投入金额小于基本注数,不做优化 | |
} | |
var betNum = 0; | |
// 选中的做保本,其余的做平均优化 | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].even == 1 ) { | |
// 保本 | |
var bonus = parseFloat(list[i].baseBonus); | |
if ( bonus < betMoney ) { | |
var multiple = parseInt(betMoney / bonus) + 1; | |
betNum += multiple; | |
list[i].multiple = multiple; | |
} | |
} | |
} | |
var baoBenMoeny = betMoney - betNum * 2; | |
// 找到最大奖金 | |
var maxBonus = 0; | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( (parseFloat(list[i].baseBonus) > maxBonus) && !(list[i].even != 1) ) { | |
maxBonus = parseFloat(list[i].baseBonus); | |
} | |
} | |
var mult = new Array(); | |
var baseMultCalc = 100; | |
if ( parseInt(betMoney) >= 10000 ) { | |
baseMultCalc = 1000; | |
} else if ( parseInt(betMoney) >= 100000 ) { | |
baseMultCalc = 10000; | |
} else if ( parseInt(betMoney) >= 1000000 ) { | |
baseMultCalc = 100000; | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].even != 1 ) { | |
var bonus = parseFloat(list[i].baseBonus); | |
mult[i] = Math.round((maxBonus / bonus) * baseMultCalc); | |
} else { | |
mult[i] = 0; | |
} | |
} | |
var baseDiv = 0; | |
for ( var i = 0; i < mult.length; i++ ) { | |
baseDiv += mult[i]; | |
} | |
var base = parseFloat(parseInt(baoBenMoeny)/(baseDiv*2)); | |
var totalNum = betNum; | |
for ( var i = 0; i < list.length; i++ ) { | |
if ( list[i].even != 1 ) { | |
totalNum += Math.round(base*mult[i]); | |
list[i].multiple = Math.round(base*mult[i]); | |
} | |
} | |
var initialNum = parseInt(betMoney)/2; | |
if ( initialNum > totalNum ) { | |
while ( initialNum > totalNum ) { | |
// 找到最小金额的投注 | |
var minBonus = parseFloat(list[0].baseBonus*list[0].multiple); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus < minBonus ) { | |
minBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus == minBonus ) { | |
list[i].multiple = list[i].multiple + 1; | |
totalNum++; | |
} | |
} | |
} | |
} else if ( initialNum < totalNum ) { | |
while ( initialNum < totalNum ) { | |
// 找到最大金额的投注 | |
var maxBonus = parseFloat(list[0].baseBonus*list[0].multiple); | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( (bonus > maxBonus) ) { | |
maxBonus = bonus; | |
} | |
} | |
for ( var i = 0; i < list.length; i++ ) { | |
var bonus = parseFloat(list[i].baseBonus*list[i].multiple); | |
if ( bonus == maxBonus ) { | |
list[i].multiple = list[i].multiple - 1; | |
totalNum--; | |
} | |
} | |
} | |
} | |
return list; | |
} | |
} | |
/** | |
* 奖金预测结构 | |
* @param winNum,命中场数 | |
* @param winBet,中奖注数,过关串以“,”隔开 | |
* @param multiple,倍数 | |
* @param minBonus,最小奖金 | |
* @param maxBonus,最大奖金 | |
* @param passArray,过关 2串1 3串1 4串1 5串1 6串1 | |
* @param bonusMaxDetailArray,中奖最大明细,BonusDetail对象数组 | |
* @param bonusMinDetailArray,中奖最小明细,BonusDetail对象数组 | |
*/ | |
function BonusYcPojo(winNum, winBet, multiple, minBonus, maxBonus, passArray, bonusMaxDetailArray, bonusMinDetailArray) { | |
this.winNum = winNum; | |
this.winBet = winBet; | |
this.multiple = multiple; | |
this.minBonus = minBonus; | |
this.maxBonus = maxBonus; | |
this.passArray = passArray; | |
this.bonusMaxDetailArray = bonusMaxDetailArray; | |
this.bonusMinDetailArray = bonusMinDetailArray; | |
} | |
/** | |
* 预测奖金详情结构【查看最大或最小奖金的详情】 | |
* @param passType,过关方式【2串1到8串1,只存在一种过关方式】 | |
* @param winNum,中奖注数 | |
* @param bonusDetail,奖金明细,计算的明细 | |
* @param bonus | |
*/ | |
function BonusDetail(passType, winNum, bonusDetail, bonus) { | |
this.passType = passType; | |
this.winNum = winNum; | |
this.bonusDetail = bonusDetail; | |
this.bonus = bonus; | |
} | |
/** | |
* 用于计算奖金明细的类 | |
* @param id | |
* @param odd | |
* @return | |
*/ | |
function BonusCalcPojo(id, odd) { | |
} | |
/** | |
* 奖金优化后的结构 | |
* @param betCode, 优化的投注码(单式) | |
* @param baseBonus,单倍的奖金 | |
* @param multiple,倍数 | |
*/ | |
function Optimization(betCode, baseBonus, multiple) { | |
this.betCode = betCode; | |
this.baseBonus = baseBonus; | |
this.multiple = multiple; | |
this.even = 0; // 0-非保本,1-保本 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment