免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3409 | 回复: 7
打印 上一主题 下一主题

[文本处理] 中国福利彩票自动对奖程序 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-01-23 17:27 |只看该作者 |倒序浏览
本帖最后由 bikkuri 于 2019-01-24 11:58 编辑

大家好,我有一个问题向大家请教。
有的人经常购买福利彩票,但是总要自己一张一张去核对是否中奖比较麻烦而且容易看错,尤其是彩票数量比较多的时候。
因此我们想写一个小脚本来自动核对是否中奖。
以下是一张福利彩票的样本。

通过扫描及文字识别处理可以得到如下的文本文件。
#--------ticket_2019009.txt---------
中国福利彩票
CHINA WELFARE LOTTERY
01D8 49A5 E154 6303 1D5C ACDF
站号:31110330   2019.01.18-09:02:00 操作员:1
双色球     期号:2019009     序号:00011   单式
红球                   蓝球
A> 07 10 13 20 30 31 - 16
B> 08 09 11 17 22 24 - 14
C> 08 15 17 21 27 33 - 11
D> 05 08 10 14 16 24 - 15
E> 01 03 08 09 19 33 - 06
开奖日:2019-01-20  倍数:001   金额:10元
站址:莘谭路435号
2019年1月16日起快3游戏派奖停止。
双色球赠票等营销活动继续进行。
D2FE 69B3 E43B 319C
上海市福利彩票发行中心承销
#-----------------------------------
从这个文本中很容易找到这张彩票的期号并从中国福利彩票的官网上找到对应的开奖结果。
#! /bin/bash
# Usage: check_lottery.sh ticket_2019009.txt
if [ ! "A"$1="A" ]; then
ticket=$1
if [ -f $ticket ]; then
lottery_number=$(grep -oP "(?<=期号:)\d{7}" $ticket)
lottery=/tmp/lottery_$lottery_number.txt
filesize=0
while [ $filesize -lt 18000 ]; do
curl -s "http://kaijiang.500.com/shtml/ssq/$(echo $lottery_number|cut -c 3-7).shtml"|iconv -c -f GBK -t UTF8|strings > $lottery
filesize=$(ls -l $lottery|awk '{print$5}')
done
red=$(grep -Po "(?<=<li class=\"ball_red\">).*(?=</li>)" $lottery)
blue=$(grep -Po "(?<=<li class=\"ball_blue\">).*(?=</li>)" $lottery)
result=$(echo $red" - $blue")
echo "Lottery result for 2019009 is: $result"

else
echo -e "ERROR: The specified lottery ticket is not found.";
fi
else
echo -e "Usage: check_lottery.sh ticket_2019009.txt \nTo check the lottery result and find out if a lottery ticket has won a lottery prize.";
fi
我用以上的小程序可以找到样本彩票的对应开奖号码为: 01 07 10 22 31 32 - 15

然后中国福利彩票的中奖规则如下:
第五章 中奖
第二十三条 双色球根据购买者所选单式投注号码(复式投注按其包含的每一注单式投注计)与当期开奖号码的相符情况,确定相应的中奖资格。具体规定如下:
一等奖:(6+1)
投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;
二等奖:(6+0)
投注号码与当期开奖号码中的6个红色球号码相同,即中奖;
三等奖:(5+1)
投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同,即中奖;
四等奖:(5+0)/(4+1)
投注号码与当期开奖号码中的任意5个红色球号码相同,或与任意4个红色球号码和1个蓝色球号码相同,即中奖;
五等奖:(4+0)/(3+1)
投注号码与当期开奖号码中的任意4个红色球号码相同,或与任意3个红色球号码和1个蓝色球号码相同,即中奖;
六等奖:(2+1)/(1+1)/(0+1)
投注号码与当期开奖号码中的1个蓝色球号码相同,即中奖。
显然,根据上述规则,样本彩票中的五组投注号码中有一组D> 05 08 10 14 16 24 - 15中了六等奖。
现在的问题是:如何根据上述规则,用awk来自动检查样本彩票是否有中奖的情况?
希望的输出格式是:
Lottery result for 2019009 is: 01 07 10 22 31 32 - 15
A> 07 10 13 20 30 31 - 16 未中奖
B> 08 09 11 17 22 24 - 14 未中奖
C> 08 15 17 21 27 33 - 11 未中奖
D> 05 08 10 14 16 24 - 15 中六等奖!
E> 01 03 08 09 19 33 - 06 未中奖
谢谢大家的指点和帮助。



论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
2 [报告]
发表于 2019-01-28 03:14 |只看该作者
本帖最后由 1cpuer 于 2019-01-28 03:50 编辑

https://jingyan.baidu.com/article/647f0115b4118c7f2048a87a.html
老板是1234567 1kw
tol~=2kw
0.1 !~=5
0.01 !~=10
从几率几乎无x
倍率1$*124 ..or 1$*123..
还不如买个麻雀牌1~2w的(大牌是庄的)

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
3 [报告]
发表于 2019-02-20 01:34 |只看该作者
请大家赐教。谢谢!

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
4 [报告]
发表于 2019-02-26 07:30 |只看该作者
呼叫@wh7211 大神

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
5 [报告]
发表于 2019-03-13 05:34 |只看该作者
:-L:-L:-L:-L

论坛徽章:
8
2016科比退役纪念章
日期:2018-10-24 08:24:0115-16赛季CBA联赛之北控
日期:2019-03-12 14:34:562016科比退役纪念章
日期:2019-04-01 10:33:0915-16赛季CBA联赛之山东
日期:2019-04-17 12:46:3215-16赛季CBA联赛之广夏
日期:2019-05-09 16:40:4015-16赛季CBA联赛之广夏
日期:2019-10-10 15:33:4015-16赛季CBA联赛之辽宁
日期:2019-10-15 08:37:0615-16赛季CBA联赛之北控
日期:2021-03-30 15:53:34
6 [报告]
发表于 2019-03-13 14:28 |只看该作者
写了个普通的方法,test.awk脚本
  1. function checkRed(A,B,i,j,n) {
  2.     for (i=1;i<=6;i++)
  3.         for (j=1;j<=6;j++){
  4.             if (A[i]==B[j]){
  5.                 n++
  6.                 break
  7.             }
  8.         }
  9.     return n
  10. }
  11. function checkBlue(a,b) {
  12.     return a==b
  13. }
  14. function getRes(a,b) {
  15.     if (a==6 && b)
  16.         return "中一等奖"
  17.     else if (a==6 && !b)
  18.         return "中二等奖"
  19.     else if (a==5 && b)
  20.         return "中三等奖"
  21.     else if ((a==5 && !b) || (a==4 && b))
  22.         return "中四等奖"
  23.     else if ((a==4 && !b) || (a==3 && b))
  24.         return "中五等奖"
  25.     else if (a<=2 && b)
  26.         return "中六等奖"
  27.     else
  28.         return "未中奖"
  29. }

  30. #取到开奖的数字
  31. BEGIN{
  32.     split(redstr,zjRed)
  33.     zjBlue=bluestr
  34. }
  35. /^[A-Z]>/{
  36.     for (i=2;i<=7;i++){
  37.         redBall[i-1]=$i
  38.     }
  39.     blueBall = $9
  40.     print $0,getRes(checkRed(redBall,zjRed),checkBlue(blueBall,zjBlue))
  41. }
复制代码

我直接测试的话正常:
  1. awk -f test.awk -v redstr="01 07 10 22 31 32" -v bluestr="15" ticket_2019009.txt
复制代码


要在你的bash脚本调用里的话,你自己看一下,在适当的位置加上,应该就可以了。
  1. awk -f test.awk -v redstr=$red -v bluestr=$blue ticket_2019009.txt
复制代码



论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
7 [报告]
发表于 2019-03-18 22:27 |只看该作者
回复 6# cfwyy

非常感谢!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
8 [报告]
发表于 2019-03-21 23:52 |只看该作者
关键是如何让中一等奖。lollol
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP