using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Business.Util
{
public class LotteryUtils
{
///
/// 计算跨度;
/// count:从左至右依次取号码个数;
///
/// 号码数组
/// 从左至右依次取号码个数
///
public static int GetSpan(IList OpenCode, int count = 0)
{
List list = new List(OpenCode);
int n = 0 >= count ? list.Count : count;
n = n > list.Count ? list.Count - 1 : n - 1;
for (int i = list.Count - 1; i > n; i--)
{ list.RemoveAt(i); }
list.Sort();
return Math.Abs(list[0] - list[list.Count - 1]);
}
///
/// 计算和值;
/// count:从左至右依次取号码个数;
///
/// 号码数组
/// 从左至右依次取号码个数
///
public static int GetSum(IList OpenCode, int count = 0)
{
List list = new List(OpenCode);
int n = 0 >= count ? list.Count : count;
n = n > list.Count ? list.Count - 1 : n - 1;
for (int i = list.Count - 1; i > n; i--)
{ list.RemoveAt(i); }
int sum = 0;
foreach (int item in list)
{ sum = sum + item; }
return sum;
}
///
/// 计算大小比例;
/// 大于等于splitNumber算大数;
/// count:从左至右依次取号码个数;
///
/// 号码数组
/// 分隔数字
/// 从左至右依次取号码个数
///
public static string GetProportionOfDX(IList OpenCode, int splitNumber, int count = 0)
{
List list = new List(OpenCode);
int n = 0 >= count ? list.Count : count;
n = n > list.Count ? list.Count - 1 : n - 1;
for (int i = list.Count - 1; i > n; i--)
{ list.RemoveAt(i); }
int a = 0, b = 0;
foreach (int item in list)
{
if (item >= splitNumber)
{ a++; }
else { b++; }
}
return a.ToString() + ":" + b.ToString();
}
///
/// 计算奇偶比例;
/// count:从左至右依次取号码个数;
///
/// 号码数组
/// 从左至右依次取号码个数
///
public static string GetProportionOfJO(IList OpenCode, int count = 0)
{
List list = new List(OpenCode);
int n = 0 >= count ? list.Count : count;
n = n > list.Count ? list.Count - 1 : n - 1;
for (int i = list.Count - 1; i > n; i--)
{ list.RemoveAt(i); }
int a = 0, b = 0;
foreach (int item in list)
{
if (1 == item % 2)
{ a++; }
else { b++; }
}
return a.ToString() + ":" + b.ToString();
}
///
/// 计算012比例
///
/// 号码数组
///
public static string GetProportionOf012(IList OpenCode)
{
int[] t = { 0, 0, 0 };
if (OpenCode[0]<0)
{
return t[0].ToString() + ":" + t[1].ToString() + ":" + t[2].ToString();
}
foreach (var item in OpenCode)
{
t[item % 3]++;
}
return t[0].ToString() + ":" + t[1].ToString() + ":" + t[2].ToString();
}
///
/// 计算质合比例
///
///
///
public static string GetProportionOfZh(IList OpenCode)
{
int[] t = { 0, 0 };
foreach (var item in OpenCode)
{
if (IsPrimeNumbers(item))
t[0]++;
else
t[1]++;
}
return t[0].ToString() + ":" + t[1].ToString();
}
///
/// 判断是否为质数
///
///
///
public static bool IsPrimeNumbers(int number)
{
if (0 == number)
return false;
int iii = number / 2;
for (int ii = 2; ii <= iii; ii++)
{
if (0 == number % ii)
{
return false;
}
}
return true;
}
///
/// 福彩3D判断大小
///
///
///
public static bool IsDxNumbers(int item)
{
if (item > 4)
{
return true;
}
else
{
return false;
}
}
///
/// 计算三区比(适用于双色球)
///
///
///
public static string SsqSanQu(IList kjh)
{
int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
foreach (int item in kjh)
{
if (item >= 1 && item <= 11)
{
sanqu++;
}
if (item >= 12 && item <= 22)
{
sanqu1++;
}
if (item >= 23 && item <= 33)
{
sanqu2++;
}
}
return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
}
///
/// 计算ac值
///
/// 需计算的开奖号码
///
public static int GetAC(string[] kjh)
{
List result = GetCombination(kjh, 2);
ArrayList acarray = new ArrayList();
int tpac = 0;
for (int i = 0; i < result.Count; i++)
{
string[] tp = result[i].Split(',');
int tmp = Math.Abs(Convert.ToInt32(tp[0]) - Convert.ToInt32(tp[1]));
if (!acarray.Contains(tmp))
{
tpac++;
acarray.Add(tmp);
}
}
return tpac - (kjh.Length - 1);
}
public static List GetCombination(string[] data, int count)
{
Dictionary dic = new Dictionary();
List output = new List();
for (int i = 0; i < data.Length; i++)
{
dic.Add(data[i], i);
}
SelectN(dic, data, count, 1, ref output);
return output;
}
private static void SelectN(Dictionary dd, string[] data, int count, int times, ref List output)
{
Dictionary dic = new Dictionary();
foreach (KeyValuePair kv in dd)
{
for (int i = kv.Value + 1; i < data.Length; i++)
{
if (times < count - 1)
{
dic.Add(kv.Key + "," + data[i], i);
}
else
{
output.Add(kv.Key + "," + data[i]);
}
}
}
times++;
if (dic.Count > 0)
{
SelectN(dic, data, count, times, ref output);
}
}
///
/// 判断奇偶
///
///
///
public static bool IsJoNumbers(int item)
{
if (item % 2 == 0)
{
return false;
}
else
{
return true;
}
}
///
/// 根据开奖号获取奇偶形态
///
///
///
public static string GetJOString(IList list)
{
StringBuilder sb = new StringBuilder(list.Count * 2);
foreach (var item in list)
{
if (item % 2 == 0)
{
sb.Append("偶");
}
else
{
sb.Append("奇");
}
}
return sb.ToString();
}
///
/// 根据开奖号获取大小形态
///
///
///
public static string GetDXString(IList list, int splitNumber)
{
StringBuilder sb = new StringBuilder(list.Count * 2);
foreach (var item in list)
{
if (item >= splitNumber)
{
sb.Append("大");
}
else
{
sb.Append("小");
}
}
return sb.ToString();
}
///
/// 根据开奖号获取质合形态
///
///
///
public static string GetZHString(IList list)
{
StringBuilder sb = new StringBuilder(list.Count * 2);
bool zh;
foreach (var item in list)
{
zh = true;
if (item == 0)
{
sb.Append("合");
continue;
}
for (int i = 2; i < item; i++)
{
if (item % i == 0)
{
sb.Append("合");
zh = false;
break;
}
}
if (zh)
{
sb.Append("质");
}
}
return sb.ToString();
}
///
/// 根据开奖号获取012形态
///
///
///
public static string Get012String(IList list)
{
StringBuilder sb = new StringBuilder(list.Count * 2);
foreach (var item in list)
{
sb.Append((item % 3).ToString());
}
return sb.ToString();
}
///
/// 根据开奖号获取和尾值形态
///
///
///
public static string GetHWString(IList list)
{
string sum = GetSum(list).ToString();
return sum[sum.Length - 1].ToString();
}
///
/// 模拟开奖号期数下拉列表
///
///
///
///
/// 格式化期数
///
public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery, string formartUrl)
{
StringBuilder sp = new StringBuilder(512);
int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0;
int year = (int)latestQi / 1000;
int startQi = year * 1000 + 1;
switch (lottery)
{
case "qlc":
minQi = 2002001;
break;
case "3d":
minQi = 2002001;
break;
case "ssq":
minQi = 2003001;
break;
case "dlt":
minQi = 2007001;
break;
case "p3":
minQi = 2004001;
break;
case "p5":
minQi = 2004001;
break;
case "qxc":
minQi = 2006001;
break;
case "3dshijihao":
minQi = 2002001;
break;
case "p3shijihao":
minQi = 2004001;
break;
case "hc1":
minQi = 2002001;
break;
case "df6j1":
minQi = 2016059;
break;
case "hd15x5":
minQi = 2016138;
break;
case "hn22x5":
minQi = 2016138;
break;
case "ny36x7":
minQi = 2016138;
break;
case "hb22X5":
minQi = 16138;
break;
case "hb30x5":
minQi = 16001;
break;
case "xj35x7":
minQi = 2016040;
break;
case "js7ws":
minQi = 16079;
break;
case "zj6j1":
minQi = 16060;
break;
case "fj31x7":
minQi = 16082;
break;
case "fj36x7":
minQi = 16059;
break;
}
while (line <= topSize)
{
_qi = (int)latestQi - j;
if (_qi < minQi)
break;
if (_qi < startQi)
{
y = y + 1;
startQi = (year - y) * 1000 + 1;
endQi = (year - y) * 1000 + 153;
if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7")
{
endQi = (year - y) * 1000 + 358;
if (2014 == (year - y))
endQi = 2014357;
}
if (0 == ((year - y) % 4))
{
endQi = endQi + 1;
}
latestQi = endQi;
_qi = endQi;
j = 0;
}
sp.AppendFormat("{1}", string.Format(formartUrl + _qi), _qi);
j++;
line++;
}
return sp.ToString();
}
///
/// 模拟开奖号期数下拉列表2
///
///
///
///
///
public static List GetLotteryDDLQi2(int topSize, long latestQi, string lottery)
{
var objCodeList = new List();
dynamic objsCode = new System.Dynamic.ExpandoObject();
//var objNumberList = new List();
//var objsNumber = new ExpandoObject();
StringBuilder sp = new StringBuilder(512);
int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0;
int year = (int)latestQi / 1000;
int startQi = year * 1000 + 1;
switch (lottery)
{
case "qlc":
minQi = 2002001;
break;
case "3d":
minQi = 2002001;
break;
case "ssq":
minQi = 2003001;
break;
case "dlt":
minQi = 2007001;
break;
case "p3":
minQi = 2004001;
break;
case "p5":
minQi = 2004001;
break;
case "qxc":
minQi = 2006001;
break;
case "3dshijihao":
minQi = 2002001;
break;
case "p3shijihao":
minQi = 2004001;
break;
case "hc1":
minQi = 2002001;
break;
case "df6j1":
minQi = 2016059;
break;
case "hd15x5":
minQi = 2016138;
break;
case "hn22x5":
minQi = 2016138;
break;
case "ny36x7":
minQi = 2016138;
break;
case "hb22X5":
minQi = 16138;
break;
case "hb30x5":
minQi = 16001;
break;
case "xj35x7":
minQi = 2016040;
break;
case "js7ws":
minQi = 16079;
break;
case "zj6j1":
minQi = 16060;
break;
case "fj31x7":
minQi = 16082;
break;
case "fj36x7":
minQi = 16059;
break;
}
while (line <= topSize)
{
_qi = (int)latestQi - j;
if (_qi < minQi)
break;
if (_qi < startQi)
{
y = y + 1;
startQi = (year - y) * 1000 + 1;
endQi = (year - y) * 1000 + 153;
if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7")
{
endQi = (year - y) * 1000 + 358;
if (2014 == (year - y))
endQi = 2014357;
}
if (0 == ((year - y) % 4))
{
endQi = endQi + 1;
}
latestQi = endQi;
_qi = endQi;
j = 0;
}
objsCode.value = _qi;
objCodeList.Add(objsCode);
objsCode = new System.Dynamic.ExpandoObject();
j++;
line++;
}
return objCodeList;
}
///
/// 手机端开奖结果下拉
///
///
///
///
public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery)
{
StringBuilder sp = new StringBuilder(512);
int minQi = 0, y = 0, j = 1, endQi = 0, line = 1, _qi = 0;
int year = (int)latestQi / 1000;
int startQi = year * 1000 + 1;
switch (lottery)
{
case "qlc":
minQi = 2002001;
break;
case "3d":
minQi = 2002001;
break;
case "ssq":
minQi = 2003001;
break;
case "dlt":
minQi = 2007001;
break;
case "p3":
minQi = 2004001;
break;
case "p5":
minQi = 2004001;
break;
case "qxc":
minQi = 2006001;
break;
case "3dshijihao":
minQi = 2002001;
break;
case "p3shijihao":
minQi = 2004001;
break;
case "hc1":
minQi = 2002001;
break;
case "df6j1":
minQi = 2016059;
break;
case "hd15x5":
minQi = 2016138;
break;
case "hn22x5":
minQi = 2016138;
break;
case "ny36x7":
minQi = 2016138;
break;
case "hb22X5":
minQi = 16138;
break;
case "hb30x5":
minQi = 16001;
break;
case "xj35x7":
minQi = 2016040;
break;
case "js7ws":
minQi = 16079;
break;
case "zj6j1":
minQi = 16060;
break;
case "fj31x7":
minQi = 16082;
break;
case "fj36x7":
minQi = 16059;
break;
}
while (line <= topSize)
{
_qi = (int)latestQi - j;
if (_qi < minQi)
break;
if (_qi < startQi)
{
y = y + 1;
startQi = (year - y) * 1000 + 1;
endQi = (year - y) * 1000 + 153;
if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1" || lottery == "df6j1" || lottery == "hd15x5" || lottery == "hn22x5" || lottery == "ny36x7" || lottery == "xj35x7")
{
endQi = (year - y) * 1000 + 358;
if (2014 == (year - y))
endQi = 2014357;
}
if (0 == ((year - y) % 4))
{
endQi = endQi + 1;
}
latestQi = endQi;
_qi = endQi;
j = 0;
}
//todo:临时增加需要补位的彩种缩写
if (lottery == "zj6j1" || lottery == "js7ws" || lottery == "hb22x5" || lottery == "hb30x5" || lottery == "fj31x7" || lottery == "fj36x7")
{
_qi = 2000000 + _qi;
}
sp.AppendFormat("", _qi);
j++;
line++;
}
return sp.ToString();
}
///
/// 模拟开奖号、试机号、开机号期数下拉列表
///
///
///
///
///
///
///
public static string GetLotteryDDLQi(int topSize, long latestQi, string lottery, string formatHTML, string formatUrl)
{
var sp = new StringBuilder(topSize * (formatHTML.Length + formatUrl.Length + 10));
int minQi = 0, y = 0, j = 0, endQi = 0, line = 1, _qi = 0;
int year = (int)latestQi / 1000;
int startQi = year * 1000 + 1;
switch (lottery)
{
case "qlc":
minQi = 2002001;
break;
case "3d":
minQi = 2002001;
break;
case "ssq":
minQi = 2003001;
break;
case "dlt":
minQi = 2007001;
break;
case "p3":
minQi = 2004001;
break;
case "p5":
minQi = 2004001;
break;
case "qxc":
minQi = 2006001;
break;
case "3dshijihao":
minQi = 2002001;
break;
case "p3shijihao":
minQi = 2004001;
break;
case "hc1":
minQi = 2002001;
break;
}
while (line <= topSize)
{
_qi = (int)latestQi - j;
if (_qi < minQi)
break;
if (_qi < startQi)
{
y = y + 1;
startQi = (year - y) * 1000 + 1;
endQi = (year - y) * 1000 + 153;
if (lottery == "3d" || lottery == "p3" || lottery == "p5" || lottery == "3dshijihao" || lottery == "p3shijihao" || lottery == "hc1")
{
endQi = (year - y) * 1000 + 358;
if (2014 == (year - y))
endQi = 2014357;
}
if (0 == ((year - y) % 4))
{
endQi = endQi + 1;
}
latestQi = endQi;
_qi = endQi;
j = 0;
}
sp.AppendFormat(formatHTML, string.Format(formatUrl, _qi), _qi);
j++;
line++;
}
return sp.ToString();
}
///
/// 福建31选7三区比
///
///
///
public static string Fj31x7SanQu(IList list)
{
int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
foreach (int item in list)
{
if (item >= 1 && item <= 10)
{
sanqu++;
}
if (item >= 11 && item <= 20)
{
sanqu1++;
}
if (item >= 21 && item <= 31)
{
sanqu2++;
}
}
return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
}
///
/// 福建31选7三区比
///
///
///
public static string Fj36x7SanQu(IList list)
{
int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
foreach (int item in list)
{
if (item >= 1 && item <= 12)
{
sanqu++;
}
if (item >= 13 && item <= 24)
{
sanqu1++;
}
if (item >= 25 && item <= 36)
{
sanqu2++;
}
}
return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
}
///
/// 华东15选5三区比
///
///
///
public static string Hd15x5SanQu(IList list)
{
int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
foreach (int item in list)
{
if (item >= 1 && item <= 5)
{
sanqu++;
}
if (item >= 6 && item <= 10)
{
sanqu1++;
}
if (item >= 11 && item <= 15)
{
sanqu2++;
}
}
return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
}
///
/// 南粤36选7三区比
///
///
///
public static string Ny36x7SanQu(IList list)
{
int sanqu = 0, sanqu1 = 0, sanqu2 = 0;
foreach (int item in list)
{
if (item >= 1 && item <= 12)
{
sanqu++;
}
if (item >= 13 && item <= 24)
{
sanqu1++;
}
if (item >= 25 && item <= 36)
{
sanqu2++;
}
}
return string.Format("{0}:{1}:{2}", sanqu, sanqu1, sanqu2);
}
///
/// 获取中奖数字
///
/// 开奖号
/// 对比号
///
public static int[] GetTheSameOpenCodes(int[] arr1, int[] arr2)
{
Array.Sort(arr1);
Array.Sort(arr2);
var list = new List();
for (int indexA = 0, lenA = arr1.Length, indexB = 0, lenB = arr2.Length; indexA < lenA && indexB < lenB;)
{
if (arr1[indexA] == arr2[indexB])
{
list.Add(arr1[indexA]);
System.Diagnostics.Debug.WriteLine(arr1[indexA] + " , ");
indexA++;
indexB++;
}
else if (arr1[indexA] < arr2[indexB])
{
indexA++;
}
else
{
indexB++;
}
}
return list.ToArray();
}
///
/// 获取命中数
///
///
public static int GetTheHitRate(int[] arr1, params int[] arr2)
{
var n = GetTheSameOpenCodes(arr1, arr2).Length;
return n;
}
}
}