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

借鉴 batman 的差值技巧:
  1. @echo off & setlocal enabledelayedexpansion
  2. > digit.txt (for /l %%i in (10000 1 19999) do (
  3.     (set s=%%i)& set /a w=!s:~1,1!,x=!s:~2,1!,y=!s:~3,1!,z=!s:~4,1!,w-=z,x-=z,y-=z,t=5
  4.     if !s:~-4!==8888 (set "t=1"
  5.     ) else if !s:~-3!==888 (set "t=2"
  6.     ) else for %%s in (000 -3-2-1 321) do if !w!!x!!y!==%%s set "t=2"
  7.     if !t!==5 if !s:~-2!==88 (set t=3) else for %%s in (00 21 -2-1) do if !x!!y!==%%s set "t=3"
  8.     if !t!==5 for %%s in (110 -1-10 101 -10-1) do if !w!!x!!y!==%%s set "t=3"
  9.     if !t!==5 if !s:~-1!==8 (set t=4) else if !y!==0 (set t=4) else (
  10.       for %%s in (011 0-1-1) do if !w!!x!!y!==%%s set t=4)
  11.     echo !t! !s:~-4!
  12. ) )
  13. start "" digit.txt
复制代码
差值基准字符取最后一个字符, 该字符没必要在匹配比较式中出现
0000 ~ 9999 共 10000 个序列:
1 类: 1
2 类: 32
3 类: 351
4 类: 1698
5 类: 7918

TOP

回复 15# qzwqzw

按顶楼题意, x(以及 a,b,c,d) 取值并不排除 8 这个数字, 只是在特定位置特定数量连续的 8 的形式, 优先匹配 8 相关的形式.
比较下面几个序列, 可以看到部分问题:
序列      类别       形式
8876        3        xabc
8877        3        aabb
8899        3        aabb

TOP

回复 11# batman
代码结果的差别(comp 比较) 共有 10 处(并不止这些):

        neorobin    batman
0022    4  xxaa     3  aabb
0033    4  xxaa     3  aabb
0044    4  xxaa     3  aabb
0055    4  xxaa     3  aabb
0066    4  xxaa     3  aabb
0077    4  xxaa     3  aabb
0099    4  xxaa     3  aabb

0202    5           3  abab
0220        5           4  abba
0303    5           3  abab

可见, 对于 a b 的关系, 我全部是按 a b 相差 1 处理的, 而 batman 应该只是在 c 也出现时按相差 1 处理的, 没有 c 出现时, a b 没有特定关系

TOP

回复 18# batman

按这种定义改了下:
  1. @echo off & setlocal enabledelayedexpansion
  2. > digit.txt (for /l %%i in (10000 1 19999) do (
  3.     (set s=%%i)& set /a "w=!s:~1,1!,x=!s:~2,1!,y=!s:~3,1!,z=!s:~4,1!,w-=z,x-=z,y-=z,t=5"
  4.     if %%i==18888 (set t=1) else if !x!!y!!z!==008 (set "t=2"
  5.     ) else for %%s in (000 -3-2-1 321) do if !w!!x!!y!==%%s set "t=2"
  6.     if !t!==5 if !y!!z!==08 (set t=3) else for %%s in (00 21 -2-1) do if !x!!y!==%%s set "t=3"
  7.     if !t!==5 (set /a "ab3=^!(w-x|y)|^!(w-y|x)") & if !ab3!==1 (set "t=3"
  8.     ) else if !z!==8 (set t=4) else if !y!==0 (set t=4) else (set /a "ab4=w|x-y") & if !ab4!==0 set "t=4"
  9.     echo !t! !s:~-4!
  10. ) )
  11. start digit.txt
复制代码
得到 5 类总数分别为: 1,32,488,1691,7788
1

评分人数

    • batman: 按规定给一半的分数PB + 10

TOP

返回列表