[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 【Warning:此贴已经过气】【挑战】用任何语言在猜数游戏作弊

本帖最后由 bbaa 于 2017-7-27 17:20 编辑

【此贴已经过气】


把算法代码发到楼下吧!
挑战地址:bbaass.tk
API:http://bbaass.tk/math/
POST:
注册:
send:"reg",
username:username
发送答案:
send:"Answer",
mathint)答案,
username:username
Return:Json
code => 200
re => ">" or "<" or "=" [=代表正确]
tokens => 本局tokens [如果tokens变化代表,本局结束 开始下一局]
winer => 上局赢家[可以知道谁抢了你的题目]

添加Token可以检测数值变更本来就有但是我忘了.....


活动:7:30P.M清档比赛10分钟后第一者给2.99元[已结束][QQ]恭喜happy886rr

应某人要求... 17-7-19 13点更改
感谢下方大佬捧场

一小时战况:

半小时战况:

十分钟战况:

一分钟战况:

数值总榜
1

评分人数

    • codegay: 很好的练习题。技术 + 1

本帖最后由 523066680 于 2018-12-25 21:05 编辑

回复 141# codegay

    那个时候最大的问题是我们这一边的代码几乎都没有加 keep_alive,导致提交速度慢了好多倍。
对方提供的java程序跑起来速度翻倍怎么想都有点夸张,特别是看到源码后发现他们的算法也还有优化空间(bulls and cows那个游戏),
当时不懂网络就错误地怀疑是程序性能啦(java的网络库也确实快)。

到了数独游戏,C语言+DLX算法是真的快。

TOP

回复 140# 523066680


    那么C语言版能跑出惊人的数据?
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

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



截图中 adad 的速度是S发布的代码在另一台电脑上运行的结果(当时vic3的程序暂停了)


情况就是这么个情况。

          评分君好像很激动……
                       |
1

评分人数

    • codegay: 继续晒数据啊。技术 + 1

TOP

多线程,实测速度能稳定在 20/min 以上(由网络环境决定)
Java 代码
  1. import com.google.gson.Gson;
  2. import okhttp3.*;
  3. import java.io.IOException;
  4. public class Main {
  5.     private static final OkHttpClient client = new OkHttpClient();
  6.     private volatile static int calls = 0;
  7.     private static int min = -1;
  8.     private static int max = 10001;
  9.     private static String tokens = null;
  10.     private static boolean finished = false;
  11.     private static int times = 0;
  12.     static {
  13.         client.dispatcher().setMaxRequests(Integer.MAX_VALUE);
  14.         client.dispatcher().setMaxRequestsPerHost(Integer.MAX_VALUE);
  15.     }
  16.     public static void main(String[] args) {
  17.         int next;
  18.         int add;
  19.         long start = System.nanoTime();
  20.         while (true) {
  21.             if (calls != 0) continue;
  22.             if (finished) {
  23.                 System.out.println(String.format("%d 次 %fs", times, (System.nanoTime() - start) / 1000000000d));
  24.                 start = System.nanoTime();
  25.                 times = 0;
  26.                 finished = false;
  27.             }
  28.             if (max - min < 10) {
  29.                 for (int i = min + 1; i < max; i++) {
  30.                     guessAsync(i);
  31.                 }
  32.                 continue;
  33.             }
  34.             next = min;
  35.             add = (max - min) / 4;
  36.             for (int i = 0; i < 3; i++) {
  37.                 guessAsync(next += add);
  38.             }
  39.         }
  40.     }
  41.     private static void guessAsync(int num) {
  42.         FormBody body = new FormBody.Builder()
  43.                 .add("send", "Answer")
  44.                 .add("math", String.valueOf(num))
  45.                 .add("username", "Scallop")
  46.                 .build();
  47.         Request request = new Request.Builder().url("http://bbaass.tk/math/").post(body).build();
  48.         client.newCall(request).enqueue(new Callback() {
  49.             @Override
  50.             public void onFailure(Call call, IOException e) {
  51.                 e.printStackTrace();
  52.                 calls--;
  53.             }
  54.             @Override
  55.             public void onResponse(Call call, Response response) throws IOException {
  56.                 synchronized (client) {
  57.                     try {
  58.                         if (finished) {
  59.                             response.close();
  60.                             calls--;
  61.                             return;
  62.                         }
  63.                         if (!response.isSuccessful()) {
  64.                             response.close();
  65.                             System.out.println("---故障---");
  66.                             calls--;
  67.                             return;
  68.                         }
  69.                         BBAAResponse result = new Gson().fromJson(response.body().string(), BBAAResponse.class);
  70.                         response.close();
  71.                         String re = result.re;
  72.                         boolean reset = !result.tokens.equals(tokens) && !re.equals("=");
  73.                         if (reset) {
  74.                             if (!result.winer.equals("Scallop")) {
  75.                                 System.out.println(String.format("---重置 by %s---", result.winer));
  76.                             }
  77.                             tokens = result.tokens;
  78.                         }
  79.                         switch (result.re) {
  80.                             case "<":
  81.                                 if (min < num) min = num;
  82.                                 if (reset) max = 10001;
  83.                                 break;
  84.                             case "=":
  85.                                 min = -1;
  86.                                 max = 10001;
  87.                                 finished = true;
  88.                                 break;
  89.                             case ">":
  90.                                 if (max > num) max = num;
  91.                                 if (reset) min = -1;
  92.                         }
  93.                     } catch (Exception e) {
  94.                         e.printStackTrace();
  95.                     }
  96.                     calls--;
  97.                 }
  98.             }
  99.         });
  100.         calls++;
  101.         times++;
  102.     }
  103.     private static class BBAAResponse {
  104.         int code;
  105.         String re;
  106.         String tokens;
  107.         String winer;
  108.     }
  109. }
复制代码

TOP

我在这个帖子下看到各种语言写的程序,被夸到飞起来,那个6啊。
坐等新的突破

TOP

朋友推荐我听这首歌
拿出来祸害人类
http://music.163.com/#/m/song?id=4466775&userid=379014753

TOP

本帖最后由 bbaa 于 2017-7-23 14:21 编辑

回复 134# 523066680


    勉强看懂...一点点.............
曲线图AJAX更新已经发布
点击打开

前端使用类库
chart.js
jquery.....
后端用https://git.oschina.net/kenvix/Tieba-Cloud-Sign的数据库操作类[我太懒了.....][之前还用文件存储来着?]
信息收集
  1. /* Model:曲线图变化速度信息收集模块 Start */
  2. $dataqx=json_decode(str_replace("\\\u","\u",option::get("bbaa_math_text")),true);
  3. $json=Json_decode(getsql(),true);
  4. /* 如果在主项中已经没有这个用户,在数据中删除掉 */
  5. foreach($dataqx as $zh=>$va) {
  6. if(empty($json["Username"][$zh])) {
  7. Unset($dataqx[$zh]);
  8. }
  9. }
  10. /* 如果在主项中已经没有这个用户,在数据中删除掉 End*/
  11. //$times=time()-(int)$change["change"]["fminute"]["last"]["Timestamp"];
  12. foreach ($change["change"]["minute"]["done"]["user"] as $key=>$value) {
  13. If ($qst) {
  14. //unset($dataqx[$key]["Timestamp"]);
  15. if((int)Count($dataqx[$key]["data"])<12) {
  16. $dataqx[$key]["data"][Count($dataqx[$key]["data"])]=$value;
  17. } else {
  18. /* 对于data满12的一个处理 {*/
  19. $temp=Array(); //对foreach的处理机制做出应对
  20. foreach ($dataqx[$key]["data"] as $keyt=>$val) {
  21. if ((int)$keyt>0&&(int)$keyt<12) {
  22. $temp[$key]["data"][Count($temp[$key]["data"])]=$val;
  23. }
  24. }
  25. Unset($dataqx[$key]["data"]);
  26. $dataqx[$key]["data"]=$temp[$key]["data"]; //合并
  27. Unset($temp);
  28. /* 对于data满12的一个处理 }*/
  29. $dataqx[$key]["data"][Count($dataqx[$key]["data"])]=$value;
  30. unset ($count);
  31. }
  32. }
  33. }
  34. /* Model:曲线图变化速度信息收集模块 End *
复制代码
  1. case "getlinedata":
  2. $json=Json_decode(getsql(),true);
  3. $Timestamp=$change_tmp["change"]["minute"]["last"]["Timestamp"];
  4. $if_date=date("H:i",$Timestamp);
  5. if($if_date==$_POST["Timestamp"]) {die(json_encode(array("Code"=>400)));}
  6. unset($change_tmp);
  7. $change=json_decode(str_replace("\\\u","\u",option::get("bbaa_math_text")),true);
  8. $tmp=Array();
  9. foreach($_POST["list"] as $value) {
  10. $tmp[$value]=$change[$value]["data"][count($change[$value]["data"])-1];
  11. }
  12. die(json_encode(array("Code"=>200,"data"=>$tmp,"Timestamp"=>$if_date)));
  13. unset($tmp);
  14. break;
复制代码
后端更新频率一分钟一次
前端get频率10秒一次

点击打开
外链图片展示
因alpha(透明)通道等原因背景为黑
2

评分人数

TOP

本帖最后由 老刘1号 于 2017-7-23 12:34 编辑

这题……让我复习了HTTP POST。
不过学会了二分法~

TOP

本帖最后由 523066680 于 2017-7-23 12:52 编辑

从零创建起来的图表,还未完善,费力+真心难看。
  1. =info
  2.     Auth: 523066680
  3.     Date: 2017-07
  4. =cut
  5. use JSON;
  6. use Encode;
  7. use Try::Tiny;
  8. use Data::Dumper;
  9. use Time::HiRes qw/time sleep/;
  10. use IO::Handle;
  11. STDOUT->autoflush(1);
  12. use threads;
  13. use threads::shared;
  14. use OpenGL qw/ :all /;
  15. use OpenGL::Config;
  16. #use Font::Freetype;
  17. use LWP::UserAgent;
  18. our $user    = "vic3";
  19. our $website = 'http://bbaass.tk/math/';
  20. our ($user, $website, $headers);
  21. our $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0', timeout => 3 );
  22. our %ucolor :shared;
  23. our $users :shared;
  24. #使共享变量支持复合数据结构
  25. print "Loading data...";
  26. make_user_struct();
  27. print "Done\n";
  28. our $SIZE_X = 800;
  29. our $SIZE_Y = 800;
  30. our $WinID;
  31. threads->create( \&getData, 1);
  32. &Main();
  33. my $count = 0;
  34. my $delta;
  35. my $speed;
  36. my $time_a = time();
  37. INFORMATION:
  38. {
  39.     sub getData
  40.     {
  41.         our ($ua, $website, $user);
  42.         my $res;
  43.         my $data;
  44.         my $info;
  45.         my $json = JSON->new->allow_nonref;
  46.         $SIG{'BREAK'} = sub { threads->exit() };
  47.         $res = $ua->post( $website, [ username => $user, send => 'reg' ] );
  48.         while (1)
  49.         {
  50.         SUBW: while (1)
  51.         {            
  52.             $res = $ua->post( $website, [ username => $user, send => 'user' ] );
  53.             try { $data = $json->decode( $res->content ); last SUBW; }
  54.             catch { sleep 2.0; printf "repeat\n" }
  55.         }
  56.         for my $e ( @{$data->{'user'}} )
  57.         {
  58.          ( $times, $name, $state ) = @$e;
  59.             push @{$users->{$name}}, $times;
  60.         }
  61.         
  62.         sleep 2.0;
  63.     }
  64.     }
  65.     sub make_user_struct
  66.     {
  67.     our ($ua, $website, $user);
  68.     my $data;
  69.     my $json = JSON->new->allow_nonref;
  70.         while (1)
  71.         {
  72.             $res = $ua->post( $website, [ username => $user, send => 'reg' ] );
  73.             $res = $ua->post( $website, [ username => $user, send => 'user' ] );
  74.             try { $data = $json->decode( $res->content ); last; }
  75.             catch { sleep 2.0; printf "retry\n" }
  76.         }
  77.         my @colors = (
  78.          [1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.5, 1.0],
  79.          [1.0, 1.0, 0.0], [0.0, 1.0, 1.0], [1.0, 0.0, 1.0],
  80.          [1.0, 1.0, 1.0],
  81.          );
  82.         my $hash;
  83.         for my $e ( @{$data->{'user'}} )
  84.         {
  85.          ( $times, $name, $state ) = @$e;
  86.             $hash->{$name} = [ $times ];
  87.         }
  88.         #建立颜色信息
  89.         my $n = 0;
  90.         for my $name ( sort keys %$hash )
  91.         {
  92.          $ucolor{$name} = shared_clone( $colors[$n++] );
  93.     }
  94.         $users = shared_clone( $hash );
  95.     }
  96. }
  97. OPENGL:
  98. {
  99.     sub display
  100.     {
  101.         glClear(GL_COLOR_BUFFER_BIT);
  102.         glColor3f(1.0, 1.0, 1.0);
  103.         glBegin(GL_LINES);
  104.             glVertex3f(-200.0, 0.0, 0.0);
  105.             glVertex3f(200.0, 0.0, 0.0);
  106.             glVertex3f(0.0, -200.0, 0.0);
  107.             glVertex3f(0.0, 200.0, 0.0);
  108.         glEnd();
  109.         my $ty = 0;
  110. for my $name ( sort keys %ucolor )
  111. {
  112. glColor3f( @{$ucolor{$name}} );
  113. glRasterPos2i(-10, $ty);
  114. printstr( $name );
  115. $ty+=2;
  116. }
  117.         my $obj;
  118.         for my $name ( keys %$users )
  119.         {
  120.          $obj = $users->{$name};
  121.          glColor3f( @{$ucolor{$name}} );
  122.         glBegin(GL_LINE_STRIP);
  123.         for my $v ( 1 .. $#{$obj} )
  124.         {
  125.             glVertex3f( $v, $obj->[$v] - $obj->[0], 0.0 );
  126.         }
  127.         glEnd();
  128.     }
  129.         glutSwapBuffers();
  130.     }
  131.     sub init
  132.     {
  133.         glClearColor(0.0, 0.0, 0.0, 1.0);
  134.     }
  135.     sub idle
  136.     {
  137.         sleep 0.1;
  138.         glutPostRedisplay();
  139.     }
  140.     sub Reshape
  141.     {
  142.         my $half = 100.0;
  143.         glViewport(0.0,0.0, $SIZE_X, $SIZE_Y);
  144.         glMatrixMode(GL_PROJECTION);
  145.         glLoadIdentity();
  146.         glOrtho(-20.0, $half, -20.0, $half,-20.0,200.0);
  147.         glMatrixMode(GL_MODELVIEW);
  148.         glLoadIdentity();
  149.         gluLookAt(0.0,0.0,100.0,0.0,0.0,0.0, 0.0,1.0,100.0);
  150.     }
  151.     sub hitkey
  152.     {
  153.         my $key = shift;
  154.         if (lc(chr($key)) eq 'q')
  155.         {
  156.             glutDestroyWindow($WinID);
  157.         }
  158.         elsif ($key == 27)
  159.         {
  160.             glutDestroyWindow($WinID);
  161.         }
  162.     }
  163.     sub Main
  164.     {
  165.         glutInit();
  166.         glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE |GLUT_MULTISAMPLE );
  167.         glutInitWindowSize($SIZE_X, $SIZE_Y);
  168.         glutInitWindowPosition(1,1);
  169.         our $WinID = glutCreateWindow("Show");
  170.         &init();
  171.         glutDisplayFunc(\&display);
  172.         glutReshapeFunc(\&Reshape);
  173.         glutKeyboardFunc(\&hitkey);
  174.         glutIdleFunc(\&idle);
  175.         glutMainLoop();
  176.     }
  177.     sub printstr
  178.     {
  179.         for my $i ( split("", $_[0]) )
  180.         {
  181.             #glutBitmapCharacter(GLUT_BITMAP_9_BY_15, ord($i));
  182.             glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, ord($i));
  183.         }
  184.     }
  185. }
复制代码

TOP

回复 132# 523066680


    完全random
建议不错,刚才在和happy聊
你也不是在练习多线程吗

TOP

本帖最后由 523066680 于 2017-7-22 17:22 编辑

回复 130# bbaa


    相当不错。相信你也借此项目锻炼了不少技能。

折线的颜色你可以建立一个色彩分明的颜色列表,不然有些颜色相近。

TOP

本帖最后由 bbaa 于 2017-7-22 17:09 编辑

回复 129# 523066680

    图片是白色背景,这里因为透明通道alpha的原因变黑....
   
    http://bbaass.tk/math/?page=change-ipage
2

评分人数

TOP

回复 129# 523066680


    曲线图静态版本出来了,你不去看看么?

TOP

回复 128# bbaa
对齐一下更好
  1. vic3        9254 + 100   8.9/min
  2. codegay     4446 + 11    1.0/min
  3. vic2        2451 + 0     0.0/min
  4. bbaa        1789 + -60   -5.3/min
复制代码

TOP

返回列表