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


    说明他用多进程或者多线程跑啊。(其中之一)

TOP

回复 76# 523066680


    按说服务器的反应速度也就那样,个人觉得多线程反而会拉慢速度(没有测试)
嘿嘿,这是逼我改进代码啊

TOP

本帖最后由 523066680 于 2017-7-19 15:40 编辑

回复 77# 老刘1号


    不是的,我说说中午之前我的方案吧,
两个进程同时跑,一个随机数做划分,一个是取中值做划分。发现确实比codegay快了。
现在范围变了发现两个进程都慢,还是有优化方向

以及刚才我的后台在跑迅雷,下载 KOF14

现在看来主要还是网络因素,两个进程对比Codegay,勉强持平
  1. codegay    19038 + 11
  2. vic2       1569 + 7
  3. 老刘       920 + 0
  4. vic3       0 + 0
  5. e          0 + 0
  6. repeat
  7. codegay    19038 + 11
  8. vic2       1569 + 9
  9. 老刘       920 + 0
  10. vic3       0 + 0
  11. e          0 + 0
  12. repeat
  13. codegay    19038 + 11
  14. vic2       1569 + 11
  15. 老刘       920 + 0
  16. vic3       0 + 0
  17. e          0 + 0
复制代码

TOP

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

回复 78# 523066680


    我是纯中心划分
还是感觉多线程会拉慢速率(会挑空测试下)……
确实可以改进

迅雷下载还玩这个666

TOP

网速当然非常影响了。

另外异常处理很重要,不然不能长时间运行。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 80# codegay


    都快2w了...

TOP

看样子站长的racket代码要来了
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

是谁在注册大量小号呢
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

一觉起来……还在刷

TOP

本帖最后由 TSCAN 于 2017-7-20 10:16 编辑
  1. #lang racket
  2. (require net/http-client json)
  3. (define (reg username)
  4.   (define-values
  5.     (a b c)
  6.     (http-sendrecv "bbaass.tk"
  7.                  "http://bbaass.tk/math/"
  8.                  #:method "POST"
  9.                  #:headers (list "Content-Type: application/x-www-form-urlencoded")
  10.                  #:data (string-append "send=reg&username=" username)))
  11.   (port->string c))
  12. (define ((send-answer username) ans)
  13.   (define-values
  14.     (a b c)
  15.     (http-sendrecv "bbaass.tk"
  16.                  "http://bbaass.tk/math/"
  17.                  #:method "POST"
  18.                  #:headers (list "Content-Type: application/x-www-form-urlencoded")
  19.                  #:data
  20.                  (string-append "send=Answer&username=" username "&"
  21.                                 "math=" (number->string ans) "&")
  22.                                 ))
  23.   c
  24.   )
  25. (define (try-once min max)
  26.   (define (mid x y) (floor (/ (+ x y) 2)))
  27.   (define first-time
  28.                       (read-json ((send-answer "racket")
  29.                       (mid min max)))
  30.                       )
  31.   (define token (hash-ref first-time 'tokens))
  32.   (define first-re (hash-ref first-time 're))
  33.   (define (token-changed? t)
  34.     (not (string=? token t)))
  35.   (define (loop min max exit)
  36.     (printf "min :~a,max :~a\n" min max)
  37.     (define this-time (read-json ((send-answer "racket") (mid min max))))
  38.     (define this-token (hash-ref this-time 'tokens))
  39.     (define this-re (hash-ref this-time 're))
  40.     (when (string=? this-re "=") (exit (printf "succeed.\n")))
  41.     (when (token-changed? this-token) (exit (void)))
  42.     (match this-re
  43.       ["<" (loop (mid min max) max exit)]
  44.       [">" (loop min (mid min max) exit)]))
  45.   (call/ec
  46.    (lambda (exit) (loop min max exit)))
  47.   )
  48. (define (repl) (try-once 0 10000) (repl))
  49. (repl)
复制代码
racket代码,有点慢,注意先用reg函数注册。

更新的代码,速度更快:
  1. #lang racket
  2. (require net/http-client json racket/unsafe/ops)
  3. (define (reg username)
  4.   (define-values
  5.     (a b c)
  6.     (http-sendrecv "bbaass.tk"
  7.                    "http://bbaass.tk/math/"
  8.                    #:method "POST"
  9.                    #:headers (list "Content-Type: application/x-www-form-urlencoded")
  10.                    #:data (string-append "send=reg&username=" username)))
  11.   (port->string c))
  12. (define-syntax-rule (send-answer connection ans)
  13.   (let-values
  14.       [[(a b c)
  15.         (http-conn-sendrecv! connection
  16.                              "http://bbaass.tk/math/"
  17.                              #:method "POST"
  18.                              #:headers (list "Content-Type: application/x-www-form-urlencoded")
  19.                              #:data
  20.                              (string-append "send=Answer&username=racket&"
  21.                                             "math=" (number->string ans) "&")
  22.                              )]]
  23.     c
  24.     ))
  25. ;;Update : No function call here
  26. (define-syntax-rule (mid x y) (if (= 1 (- y x))
  27.                                   y (unsafe-fxquotient (unsafe-fx+ x y) 2)))
  28. (define (try-once)
  29.   (define min 0)
  30.   (define max 10000)
  31.   (define next (mid min max))
  32.   ;;Update : A bug has been fixed.
  33.   (define http-connector (http-conn-open "bbaass.tk" #:auto-reconnect? #t))
  34.   (define first-time
  35.     (read-json (send-answer http-connector
  36.                             (mid min max)))
  37.     )
  38.   (define token (hash-ref first-time 'tokens))
  39.   (define first-re (hash-ref first-time 're))
  40.   (define (token-changed? t)
  41.     (not (string=? token t)))
  42.   
  43.   (define (loop min max)
  44.     (printf "min :~a,max :~a\n" min max)
  45.     (define next (mid min max))
  46.     (define this-time (read-json (send-answer http-connector next)))
  47.     (define this-token (hash-ref this-time 'tokens))
  48.     (define this-re (hash-ref this-time 're))
  49.     (cond
  50.       [(string=? this-re "=") (begin (printf "succeed.\n")
  51.                                      (http-conn-close! http-connector)
  52.                                      )]
  53.       [(token-changed? this-token)  (http-conn-close! http-connector)]
  54.       [(string=? this-re "<") (loop next max)]
  55.       [(string=? this-re ">") (loop min next)]
  56.       
  57.       ))
  58.   ;;Update: Because of tail call optimization, we don't need call/cc or call/ec
  59.   (match first-re
  60.     ["<" (loop next max)]
  61.     [">" (loop min next)]
  62.     [_ (begin (printf "succeed.\n")
  63.               (http-conn-close! http-connector)
  64.               )]
  65.     )
  66.   )
  67.   
  68. (define (repl) (try-once) (repl))
  69. (repl)
复制代码
3

评分人数

TOP

回复 83# codegay


    以加屏蔽 UA策略封禁......

TOP

本帖最后由 老刘1号 于 2017-7-20 18:08 编辑

新版:
1、递归优化为循环,优化算法。
2、强大的错误处理,服务器挂掉了都还会运行等待恢复。
3、开始检测tokens的值的变化。
其它:
为防止利用,做了简单加密(使用乱码兄的加密代码)~
决定开源,代码无法运行,需要改UA
不过算法是完整的
VBS
  1. Const [宿主] = "CSCRIPT.EXE" 'WSCRIPT
  2. If Not UCase(Right(WScript.FullName,11)) = UCase([宿主]) Then
  3. Dim Args,Arg
  4. For Each Arg in Wscript.Arguments
  5. Args=Args&Chr(&H20)&Chr(&H22)&Arg&Chr(&H22)
  6. Next
  7. CreateObject("Wscript.Shell").Run _
  8. [宿主]&Chr(&H20)&Chr(&H22)&WScript.ScriptFullName&Chr(&H22)&Args
  9. WScript.Quit
  10. End If
  11. on error resume next
  12. If MsgBox("是否查看原贴?",1) = 1 Then CreateObject("Wscript.Shell").run "http://www.bathome.net/thread-44616-1-1.html"
  13. With CreateObject("MSXML2.XMLHTTP")
  14. .Open "POST", "http://bbaass.tk/math/", False
  15. .setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
  16. .Send "send=reg&username=老刘"
  17. End With
  18. dim tokens,[大鱼小鱼或等鱼?],[Arr返回的数据]
  19. High = 10001
  20. Low = -1
  21. Do
  22. Do
  23. Mid_=(High+Low)\2
  24. [Arr返回的数据] = Math(Mid_)
  25. [大鱼小鱼或等鱼?] = [Arr返回的数据](0)
  26. if tokens<>[Arr返回的数据](1) then
  27. If [大鱼小鱼或等鱼?] = "=" then
  28. wscript.echo "Win!The number is "&Mid_
  29. Else
  30. Wscript.echo "Tokens is change"
  31. End if
  32. tokens=[Arr返回的数据](1)
  33. High = 10001
  34. Low = -1
  35. Exit do
  36. Else
  37. Select Case [大鱼小鱼或等鱼?]
  38. Case ">"
  39. WScript.Echo ">,so try "&Low&","&Mid_
  40. High = Mid_
  41. Case "<"
  42. WScript.Echo "<,so try "&Mid_&","&High
  43. Low = Mid_
  44. End Select
  45. End if
  46. Loop
  47. Loop
  48. Function Math(num)
  49. dim [返回数据]
  50. With CreateObject("MSXML2.XMLHTTP")
  51. .Open "POST","http://bbaass.tk/math/", False
  52. .setRequestHeader "CONTENT-TYPE","application/x-www-form-urlencoded"
  53. .send "send=Answer&math=" & num & "&username=老刘"
  54. [返回数据] = .responseText
  55. Math = Split(Split(Split([返回数据],",")(2),"""")(3) & " "&Split([返回数据],"""")(13)," ")
  56. End With
  57. End Function
复制代码

TOP

本帖最后由 codegay 于 2017-7-20 02:17 编辑

来啊。继续挂机赛跑啊。不然不能发现代码中的一些小问题,改进的动力太也不大。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

可以重置我的数据,从头开始。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

本帖最后由 codegay 于 2017-7-20 07:11 编辑

这是nim版的程序,边摸边学,直到前几天写好的。这两天只作了小细节上修改。


编译命令:
  1. nim c -d:release -r "c:\Users\root\Desktop\xx.nim"
复制代码
  1. import httpclient
  2. import strutils
  3. import json
  4. import math
  5. import os
  6. import encodings
  7. const chrome = "Chrome/60.0.3088.3"
  8. let apiurl = "http://bbaass.tk/math/"
  9. var name = "codegay"
  10. var client: HttpClient
  11. var head = { "Content-Type": "application/x-www-form-urlencoded" ,
  12.             "User-Agent": chrome,  "X-Requested-With": "XMLHttpRequest"}
  13. proc reg(): int {.discardable.} =
  14.     var client = newHttpClient()
  15.     try:
  16.         echo client.postContent(apiurl,
  17.         multipart=newMultipartData({"send":"reg","username":name}))
  18.     except:
  19.         result = 0
  20.     finally:
  21.         client.close()
  22. proc showuser(): int {.discardable.} =
  23.     var client = newHttpClient()
  24.     try:
  25.         echo client.postContent(apiurl,
  26.         multipart=newMultipartData({"send":"user", "username":name}))
  27.         result = 1
  28.     except:
  29.         echo convert(getCurrentExceptionMsg(),"gb2312","utf8")
  30.         result = 0
  31.     finally:
  32.         client.close()
  33. proc answer(min=0, max=10000): string {.discardable.} =
  34.     var min = min
  35.     var max = max
  36.     var answering:bool = true
  37.     var counter = 1
  38.     var token = ""
  39.     var code:HttpCode = Http100
  40.     var body = ""
  41.     while answering:
  42.         client = newHttpClient(chrome)
  43.         client.headers = newHttpHeaders(head)
  44.         var math:int = int(round((min+max)/2))
  45.         var bodydata = "send=Answer&username=$1&math=$2" % [name,$math]
  46.         try:
  47.             var res = client.post(apiurl, body=bodydata)
  48.             code = res.code
  49.             body = res.body
  50.             echo "HTTP:$1    counter:$2    math:$3" % [$code,$counter,$math]
  51.             if code.is2xx():
  52.                 echo body
  53.                 try:
  54.                     var jsonre:JsonNode = parseJson(body)
  55.                     var re = jsonre["re"].getstr()
  56.                     var retoken = jsonre["tokens"].getstr()
  57.                     case re:
  58.                         of "=":
  59.                             answering = false
  60.                             token = ""
  61.                         of  ">":
  62.                             max = math
  63.                         of  "<":
  64.                             min = math
  65.                     if (min >= max):
  66.                         echo "min >= max"
  67.                         answering = false
  68.                         break
  69.                     if token != retoken and token != "":
  70.                         echo "token!"
  71.                         break
  72.                     token = retoken
  73.                 except:
  74.                     echo "解析json错误!"
  75.             elif code == Http500:
  76.                 reg()
  77.                 echo "500"
  78.             else:
  79.                 echo "else"
  80.         except:
  81.             echo convert(getCurrentExceptionMsg(),"gb2312","utf8")
  82.             break
  83.         finally:
  84.             counter += 1
  85.             client.close()
  86. reg()
  87. showuser()
  88. while true:
  89.     discard answer()
复制代码
1

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

返回列表