Board logo

标题: [数值计算] CWHGN比赛来啦!可以用任何语言任何算法来猜数哦! [打印本页]

作者: tiger999    时间: 2017-7-25 15:23     标题: CWHGN比赛来啦!可以用任何语言任何算法来猜数哦!

本帖最后由 tiger999 于 2017-7-26 23:23 编辑

首先感谢 bbaa在排行版上面的制作和index的纠正
其次是这游戏
首先这游戏的灵感是来自于bbaa的猜数游戏
这个游戏和bbaa的猜数游戏有一点不一样
bbaa的游戏是反馈大和小,我的则是反馈A和B的数量

主页是
http://www.codetiger.win/extra/index.php

什么是A和B的数量呢?请看下面


这个游戏是著名的猜数字游戏
百度百科介绍,里面还有一些算法可以帮你!
是一个4位数用10个数字0-9(也就是5040种排列,PS不能有重复)
如果位置对了数字也对了那么就是一个A
如果数字对了但是位置错了那么就是一个B
举个例子答案是9124
我猜了9042
9是A 那就是1A
2是B 4是B 那就是2B
那么这个答案就是1A2B

现在说API端口
http://www.codetiger.win/extra/API.php (可能还没开放)
POST和GET都可以(我用的是request 2333)
参数:
passwordstring)
username:(string)
number:(int)
send:answer (必须只能是answer)
返回的是
Content-type: application/json
tokens:(int)
A:(int)
B:(int)
count:(int)
code:(int)

code的意义:
100对了!你是胜利者!
150全部符合要求,可是答案错了
200参数残缺!
300密码都错了,你还弄啥
400参数number的位数不是4位数
500参数number有重复数字
这里PS一下 tokens可以被理解为这一局的编号,如果tokens变了,证明有其他人做出来了
而count是自己目前的积分

还有请务必加群,因为这其实本身是群内的比赛,人不太够,并且这个比赛有奖品,所以如果你不加群我也不知道去哪里找你
对!这个比赛有奖品哦!参加过上次群里的比赛的人可能知道,这奖品奖金还挺多的哦!

作者: 老刘1号    时间: 2017-7-25 16:24

本帖最后由 老刘1号 于 2017-7-25 16:30 编辑

HASH的话,可以试试挖矿……

先求出指定长度的所有组合,然后求每个组合对应的HASH,这算挖矿完成
然后根据HASH倒退出组合的话,应该会比较快
小于6位可以试试
大于的话……工程量有些大……

我这段看起来和一楼没什么联系,楼主别介意哈……
作者: 3518228042    时间: 2017-7-25 18:08

本帖最后由 3518228042 于 2017-7-25 19:11 编辑

有能力的话搞个众算币吧,这个我没能力搞,比如光子叠加态算法,让巨量电脑帮忙挖矿,叠加到360度任意纬度多次叠加,成果可以是你的,
还有比如色谱叠加算法,三原色、六基色或五色激光、七色的都可以,四色的貌似有人搞DNA算法了,数据错误能自动纠错,
多色激光在光纤传输的话,可以多次释放以数万倍的压缩率在电脑与设备之间传输,别人说可以数万倍,我通过我的计算可以万倍压缩传输,我不懂纠错码不能确保准确率,还得解码芯片就更搞不定了。
上次看文章说中国、德国已经能用多色激光以3百多倍压缩率远距离传输(具体几色不知道,而且具体倍数也忘记了),由于光纤传输过程中的损失不可能做太大,但是短距可以。
5色激光,红、绿、蓝、红外线、紫外线分割成1024极亮度或更大,每个脉冲颜色的激光代表的不是1bit,而是一个数值及前后的数值,
传输可以是16进制的,计算可以是6进展的,这样损失了相邻的就会立刻被发现,而多个bit的激光才是每次完整的一次传输,
纠错码及多次解码公式同步传输,这样可以传输给别人的是一个计算题,而别人得到的是一个一个计算题+结果。

说明下,这个还真没群,以前在一个比特币群一些人就讨论过,比特币开发者可能用分布式计算,让众多完成图形叠加算法或池化,当时还是什么也不知道的。
我是在2008年过年的时候别人教我挖比特币的,挖了很多,最多一天能十几个,少的几个,我都不去看我挖了多少,
由于我连续挖矿电脑死机坏了,电脑以前放片被我爸发现,结果送修被我爸格式化了,还是给重新分区给安装win7x64的,分区表都被替换的,比特币数据被覆盖,
原先备份的光盘是和盗版XP混一起的,结果后来花了读不了,没想到现在比特币涨那么多,如果国家数据中心能帮忙找回数据就好了,他们自己搞去算捐献了
作者: 老刘1号    时间: 2017-7-25 18:19

回复 5# 523066680


    哈哈哈好像确实没群号,笑抽
作者: a2002    时间: 2017-7-25 18:59

同上

还有这么加PB
作者: 老刘1号    时间: 2017-7-25 21:55

回复 7# a2002


    首先你需要混成斑竹或者技术组成员
作者: 老刘1号    时间: 2017-7-25 21:56

回复 4# 3518228042


    哈哈,那太可惜了啊
作者: codegay    时间: 2017-7-25 22:51

tiger999  是a2002的小号吗?
刚上高中?也这么厉害的。
作者: a2002    时间: 2017-7-25 23:03

这...这...这不关我的事呀
作者: happy886rr    时间: 2017-7-25 23:09

回复 10# codegay
他们是来自bat吧的。bat吧是批处理自由技术的发源地,而批处理之家更倾向于批处理学术教学。这群小伙伴都是小学、初中的在校生,但技术很厉害的。
作者: codegay    时间: 2017-7-26 11:14

沿着这个思路扩展,各种九宫格,魔方之类的也可以放上比赛了。
作者: a2002    时间: 2017-7-26 11:23

九宫格是数独么
作者: a2002    时间: 2017-7-26 11:43

回复 15# 523066680


    lz已经忘了这件事了?
作者: 523066680    时间: 2017-7-26 11:46

本帖最后由 523066680 于 2017-7-26 11:47 编辑

回复 16# a2002

   其实这并不妨碍我们线下测试和比较计算机的运算能力。
当然,还是线上更吸引人,更有去写算法的动力,bbaa完全可以在原有的网站基础上搞起。
作者: a2002    时间: 2017-7-26 11:48

回复 17# 523066680


    话说这几天都没有看见bbaa了
作者: tiger999    时间: 2017-7-26 11:57

回复 2# 523066680


    第一次在bathome发帖。。
作者: tiger999    时间: 2017-7-26 11:58

回复 5# 523066680


    点击链接啊。。蓝色字体。。
作者: tiger999    时间: 2017-7-26 11:58

回复 6# 老刘1号


    有啊。。
作者: tiger999    时间: 2017-7-26 11:59

回复 10# codegay


    不是啊,我才小学六年级,快初一了。。
作者: tiger999    时间: 2017-7-26 11:59

回复 12# happy886rr


    。。。。。我是 “编程我可是第一”
作者: a2002    时间: 2017-7-26 12:00

终于。。。。。。。。。。。。。。。。。。。。很多人等着你的
作者: a2002    时间: 2017-7-26 12:02

回复 20# tiger999


    蓝色字体不是百度百科吗
作者: tiger999    时间: 2017-7-26 12:08

回复 3# 老刘1号


    恩。。
作者: codegay    时间: 2017-7-26 12:53

回复 14# a2002


    就是数独。
作者: tiger999    时间: 2017-7-26 15:13

回复 25# a2002


    一开始的地方有一个蓝色字体,而且文字就是群号啊。。。。
作者: tiger999    时间: 2017-7-26 15:15

回复 18# a2002


    啊,他在弄他的算法和群里的一些其他事情。。
作者: a2002    时间: 2017-7-26 15:31

回复 29# tiger999


    原来你们是一起的啊,是小学同学吗
作者: a2002    时间: 2017-7-26 16:00

本帖最后由 a2002 于 2017-7-26 16:04 编辑

回复 any# everyone

Look at the title
我感觉我们跑题了
作者: 老刘1号    时间: 2017-7-26 18:07

回复 31# 523066680


    淡定淡定,小孩子哪能想到这么多
那俩个逻辑推理基本不成立
用大字体也许是觉得默认的有些小,不好看清
至于没放群号,应该是复制的时候忘记弄了
作者: tiger999    时间: 2017-7-26 20:24

回复 33# codegay


    蛤?我只是在把东西复制过去了。。。。群号在那里有啊。。。。而且如果不参加其实加不加都没啥问题,而且scallop也已经百分百赢了。。。所以加不加也没啥太大的问题。。
作者: tiger999    时间: 2017-7-26 20:26

回复 31# 523066680


    TAT版主理解一下,只是感觉原字体太小了,以前在Mcbbs发帖也是五号,没想到这里怎么大,至于群号,除非是超级大佬,否则也没啥意思了,现在scallop已经8000多了和第二名bbaa相差很多,所以奖品应该是给scallop了。。
作者: tiger999    时间: 2017-7-26 20:27

回复 30# a2002


    不是啊。。他比我大一个年级。。而且是深圳,他似乎是壮族自治区?
作者: a2002    时间: 2017-7-26 20:56

回复 38# 523066680


    对啊,“技术”分嘛,也不耗你什么
作者: a2002    时间: 2017-7-26 21:12

我们对不起PB二字,用“技术”代替了
作者: 老刘1号    时间: 2017-7-26 21:18

回复 38# 523066680


    问题是,不是人人都是斑竹啊
作者: a2002    时间: 2017-7-26 21:18

本帖最后由 a2002 于 2017-7-26 21:20 编辑

呃~~~~~~~~~~~~

手贱又想加分
掏出荷包发现没有了
作者: a2002    时间: 2017-7-26 21:21

回复 44# 523066680


    反正我没找到
作者: a2002    时间: 2017-7-26 21:23

呵呵   以假乱真的评分框
作者: 老刘1号    时间: 2017-7-26 21:24

回复 44# 523066680


    Infact,现在不是斑竹的话只能加技术分
作者: a2002    时间: 2017-7-26 21:40

回复 47# 老刘


    老刘你咋知道?
    出公告了?
作者: 老刘1号    时间: 2017-7-26 22:17

本帖最后由 老刘1号 于 2017-7-26 22:19 编辑

回复 49# a2002


    以前……好像在论坛的某个帖子里看到过
好像是"pb评分现只对管理团队和技术组成员开放"
作者: tiger999    时间: 2017-7-26 22:56

回复 37# 523066680


    版主我惹你了吗。。。。群号就在网站里面,并且你看看scallop现在40000多,我不管是谁,反正目前玩我网站的scallop是最高,而且比我想的要高非常多,还有请不要随便说别人小学生,这是很不礼貌的,而且就算我的逻辑不合逻辑,有必要去骂一个人吗?自己有自己的观点,群号在哪里有什么关系吗?
作者: tiger999    时间: 2017-7-26 22:57

回复 46# a2002


    哪里以真乱假了?
作者: tiger999    时间: 2017-7-26 22:59

回复 37# 523066680


    并且数据不开放?你自己打开网站看看吧,里面有排行榜,很清楚,假如你觉得他不厉害,那就超越他呗
作者: a2002    时间: 2017-7-26 23:00

本帖最后由 a2002 于 2017-7-26 23:01 编辑

回复 52# tiger999


    晕死~~我是说上楼的图片
作者: bbaa    时间: 2017-7-26 23:02

回复 37# 523066680


    13次每分钟 非多线程
作者: bbaa    时间: 2017-7-26 23:03

回复 53# tiger999


    比数量没意义
作者: a2002    时间: 2017-7-26 23:06

回复 any# everyone
恍然大悟,网站是一楼的网址删去"API.php"
http://www.codetiger.win/extra
作者: bbaa    时间: 2017-7-26 23:08

回复 55# bbaa


    他延迟低
作者: 老刘1号    时间: 2017-7-26 23:23

回复 57# a2002


    emmm,网站确实靠猜
作者: a2002    时间: 2017-7-26 23:25

呵呵,都晚了
作者: a2002    时间: 2017-7-26 23:28

这网址居然让我猜中了,居然啊
作者: a2002    时间: 2017-7-26 23:35

原来这么多误会来源于一个"API.php"
作者: a2002    时间: 2017-7-26 23:37

怎么回事
可以进入了http://www.codetiger.win/extra/index.php
作者: 523066680    时间: 2017-7-27 07:27

回复 57# a2002


    这就尴尬了。
作者: a2002    时间: 2017-7-27 07:38

这应该叫猜网址游戏
作者: tiger999    时间: 2017-7-27 11:49

回复 54# a2002


    哦。。。。。sorry
作者: tiger999    时间: 2017-7-27 11:50

回复 57# a2002


    >.<原来是这样的
作者: tiger999    时间: 2017-7-27 11:56

回复 59# 老刘1号


    2333333333333333333333333333333333
作者: a20150604    时间: 2017-7-27 19:50

http://slovesnov.users.sourceforge.net/bullscows/bullscows.pdf

http://slovesnov.users.sourceforge.net/index.php?bullscows,english
作者: PakTC    时间: 2017-7-28 23:24

本帖最后由 PakTC 于 2017-7-28 23:30 编辑

提供一点资料
www.cs.nccu.edu.tw/~chaolin/papers/science3203.pdf
这个文档是中文的,讲了两个数字游戏,关于这次的游戏的分析和解法在后半部分。

另外给准备做这道题但是还未实践的小伙伴提一些建议:
服务器响应蛮快的,不要让程序在运算和筛选上面过多耗时,
尽量使用速度更快的语言,如果一定要用脚本,空间换时间吧。
作者: codegay    时间: 2017-7-29 02:46

回复 70# PakTC


    最大的时间消耗应该都是网络IO上,直觉用什么语言差异都不大。算法和方法才有影响。
作者: 523066680    时间: 2017-7-29 05:27     标题: 一点分析

本帖最后由 523066680 于 2017-7-29 08:55 编辑

前面是个误会,链接的问题实在不应该,我们反复问楼主群号,他反复回答是在主题蓝色的链接里,
而楼主发的网站链接恰恰没有打上 url 标签,所以不是蓝色的,只有百度百科是蓝色的。
大写的懵(每一次看回复都是黑人问号脸)!

知道链接后就去试了,游戏规则之一是,post 4位不重复的数字测试结果。数字少了不行。
试了一阵子发现可以用字母做占位符,这个时候还不知道筛选法。

多线程?筛选法是否还考虑多线程?Edit by 523066680[Finished in 0.2s]
作者: avgBullsCows    时间: 2017-7-29 10:32

本帖最后由 avgBullsCows 于 2017-7-29 10:33 编辑

我想试试这棵树

http://slovesnov.users.sourceforge.net/index.php?bullscows_tree,english,avgBullsCows

这棵树的生成脚本

http://slovesnov.users.sourceforge.net/scripts/bullscows.js
  1. 整个脚本文件 1000+ 行, 就不贴了
复制代码

作者: 523066680    时间: 2017-7-29 12:27

本帖最后由 523066680 于 2017-7-29 14:33 编辑

回复 73# avgBullsCows

avgBullsCows 好像是跑可重复数字的,平均速度4.x, crusBullsCows 是不可重复4位数字的,平均速率 5.25 和百度提到的一样
    http://slovesnov.users.sourcefor ... lish,crushBullsCows

更新一下现在的情况,还是 JAVA 对 PERL
  1. Scallop    208598 + 1351  172.0/min
  2. vic3       45021 + 722   91.9/min
  3. bbaa         238 + 0     0.0/min
  4. TJUGERKFER    55 + 0     0.0/min
  5. adad          27 + 0     0.0/min
复制代码
差不多是2:1

另一个对比,分别 POST 网站 1000次,java 耗时大约52秒,perl 耗时大约64秒。
作者: avgBullsCows    时间: 2017-7-29 13:00

回复 74# 523066680
  1. An secret number for bulls-cows game can be four-place decimal with different
  2. digits from 0 to 9. Total amount of secret numbers is 10!/6! = 5040. For
  3. mastermind secret number is four-place digital with digits from 0 to 5. Digits
  4. can repeat. So total amount of secret numbers is 6^4 = 1296. In common case
  5. such games have three parameters - number of positions, number of different
  6. digits and repeatability (1 - yes, 0 -no). From this point of view bulls-cows game
  7. has parameters (4, 10, 0), mastermind has parameters (4, 6, 1). Optimization
  8. of two game types has two directions.
复制代码
我的理解是 bulls-cows 游戏是 参数描述(4, 10, 0) 4个位置, 10个符号, 符号不可重复
mastermind 参数描述(4, 6, 1) 4个位置, 6个符号, 符号可重复

不论哪种游戏, 算法优化有两个目标方向
  1. The goal is to find algorithm which minimizes amount of secret numbers which algorithm can guess ...
复制代码
crush 算法的优化目标, 搜索树空间回合总数最小化
  1. The second criterion is minimize average amount of turns for guess arbitrary secret number - minimal average game length
复制代码
avg 算法的优化目标, 平均搜索回合数(平均游戏长度)最小化
作者: 523066680    时间: 2017-7-31 15:48

观察比赛各玩家猜题速度的脚本。
  1. =info
  2.     Auth: 523066680
  3.     Date: 2017-07
  4. =cut
  5. use JSON;
  6. use Encode;
  7. use Data::Dumper;
  8. use Try::Tiny;
  9. use Time::HiRes qw/time sleep/;
  10. use IO::Handle;
  11. STDOUT->autoflush(1);
  12. use LWP::Simple;
  13. use LWP::UserAgent;
  14. our $user = "vic3";
  15. our $pass = "tempcode";
  16. our $website = 'http://www.codetiger.win/extra/score.json';
  17. our $ua = LWP::UserAgent->new(  agent => 'Mozilla/5.0', timeout => 3 );
  18. my %ever;
  19. my %current;
  20. getData( \%ever );
  21. my $count = 0;
  22. my $delta;
  23. my $speed;
  24. my $time_a = time();
  25. while (1)
  26. {
  27.     getData(\%current);
  28.     $count = 0;
  29.     for my $k (reverse sort { $ever{$a} <=> $ever{$b} } keys %ever)
  30.     {
  31.         $delta = $current{$k} - $ever{$k};
  32.         $speed = $delta / (time() - $time_a) * 60.0;
  33.         printf "%-10s %5d + %-5d %.1f/min\n",
  34.             encode('gbk',  $k),
  35.             $ever{$k},
  36.             $delta,
  37.             $speed
  38.             ;
  39.         last if ($count++ > 5);
  40.     }
  41.     print "\n";
  42.     sleep 10.0;
  43. }
  44. sub getData
  45. {
  46.     my $href = shift;
  47.     my $res;
  48.     my $data;
  49.     while (1)
  50.     {
  51.         $res = $ua->get( $website );
  52.         try { $data = decode_json( $res->content ); last; }
  53.         catch { sleep 2.0; printf "repeat\n" }
  54.     }
  55.     for my $name ( keys %$data )
  56.     {
  57.         $href->{$name} = $data->{$name};
  58.     }
  59. }
复制代码

作者: 523066680    时间: 2017-8-4 22:11

本帖最后由 523066680 于 2017-8-4 22:30 编辑

回复 64# avgBullsCows

    感谢neo提供的最优搜索树,省去了筛选+处理数组的过程,本地效率大大提升。(后来我发现这个问题即使运行时效率提高了,网络不熟悉的话还是要吃大亏啊)
读取 JSON 进行刷题的 Perl 代码:
  1. =info
  2. 523066680 2017-08
  3. =cut
  4. use JSON;
  5. use IO::Handle;
  6. use File::Slurp;
  7. use LWP::UserAgent;
  8. use Data::Dumper;
  9. use Time::HiRes qw/sleep/;
  10. STDOUT->autoflush(1);
  11. our $user = "vic3";
  12. our $pass = "tempcode";
  13. our $website = 'http://www.codetiger.win/extra/API.php';
  14. our $ua = LWP::UserAgent->new(  keep_alive=>1, agent => 'Mozilla/5.0', timeout => 0.2 );
  15. my $json;
  16. my $tree;
  17. $json = read_file("crushBullsCows.json");
  18. $json=~s/\'/\"/g;
  19. $tree = decode_json($json);
  20. AGAIN:
  21. my $ref = $tree;
  22. my $guess = $ref->{'xx'};
  23. my $AB;
  24. my ($curr, $prev) = (undef, undef);
  25. while (1)
  26. {
  27. ($AB, $curr) = post_num( $guess );
  28.     print " [$AB] [ $guess ] $curr\n";
  29.     if ( $AB eq "40" ) {
  30.         print "Success $guess\n\n";
  31.         last;
  32.     }
  33.     if (defined $prev and ($curr ne $prev) )
  34.     {
  35.         print "Tokens changed\n [$AB] [ @$guess ] $curr\n";
  36.         goto AGAIN;
  37.     }
  38.     #update guess number, and $ref
  39. for my $e ( @{$ref->{'c'}})
  40. {
  41. if ( exists $e->{$AB} )
  42. {
  43. #print $e->{$AB};
  44. $guess = $e->{$AB};
  45. $ref = $e;
  46. last;
  47. }
  48. }
  49.     $prev = $curr;
  50. }
  51. goto AGAIN;
  52. sub post_num
  53. {
  54.     our($ua, $website, $user, $pass);
  55.     my $n = shift;
  56.     my $res;
  57.     my $data;
  58.     my $text;
  59.     while (1)
  60.     {
  61.         $res =
  62.             $ua->post(
  63.                 $website,
  64.                 [ username=>$user, password =>$pass, number=>$n, send=>'answer' ]
  65.             );
  66.         $text = $res->content();
  67.         if ( $text =~/"A":\d,"B":\d/ ) { last }
  68.         print ".";
  69.         sleep 0.01;
  70.     }
  71.     #print $res->content(), " - $n\n";
  72.     $data = decode_json( $res->content() );
  73.     return $data->{A} . $data->{B}, $data->{tokens};
  74. }
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2