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

想到 3 种思路:
外扩, 内填, 拟出规则直接生成
其实是若干个同心 " 圆 ",  根据与 圆心 的距离, 可以很简单的确定 字符

TOP

抢先发一个同心圆算法的
  1. @echo off & setlocal enabledelayedexpansion
  2. set "CS=zyx"
  3. for /l %%p in (1 1 99) do (
  4.   set /a "rMax=%%p-1"
  5.   for /l %%l in (-!rMax! 1 !rMax!) do (
  6.     set "L="
  7.     set /a "a=%%l, t=a>>31, a=(a+t)^t"
  8.     for /l %%c in (-!rMax! 1 !rMax!) do (
  9.       set /a "b=%%c, t=b>>31, b=(b+t)^t"
  10.       set /a "t=(a-b)>>31, r=(t&b)|(~t&a), rd=r-rMax-1"
  11.       if !r!==0 (
  12.         if !rMax! geq 3 (set "L=!L!1") else set "L=!L!!CS:~-%%p,1!"
  13.       ) else (
  14.         if !rd! lss -3 (
  15.           set "L=!L!0"
  16.         ) else for %%i in (!rd!) do set "L=!L!!CS:~%%i,1!"
  17.       )
  18.     )
  19.     echo,!L!
  20.   )
  21.   pause & cls
  22. )
复制代码
1

评分人数

    • plp626: 不错。。。技术 + 1

TOP

本帖最后由 neorobin 于 2012-6-2 11:26 编辑

将 半径 大于或等于 4 时, 调整为 高效算法
  1. @echo off & setlocal enabledelayedexpansion
  2. if "%1"=="" (
  3.   for %%a in (  FontSize:00080008
  4.                 FontFamily:00000030
  5.                 WindowSize:00c700c7
  6.                 ScreenColors:0000000f
  7.                 CodePage:000001b5
  8.                 ScreenBufferSize:00c700c7
  9.   ) do for /f "tokens=1,2 delims=:" %%b in ("%%a") do (
  10.     >nul reg add HKCU\Console\CharBox /v %%b /t reg_dword /d 0x%%c /f
  11.   )
  12.   start "CharBox" /max "%ComSpec%" /c "%~f0" 1&goto:eof
  13. ) else ( >nul reg delete HKCU\Console\CharBox /f )
  14. set "CS=zyx" & set "CSR=xyz"
  15. for /l %%p in (1 1 200) do set "_0=0!_0!"
  16. set "_1=!_0:0=x!"
  17. set "_2=!_0:0=y!"
  18. set "_3=!_0:0=z!"
  19. set NL=^
  20. for /l %%p in (1 1 99) do (
  21.   title %%p
  22.   set /a "rMax=%%p-1"
  23.   if !rMax! lss 4 ( rem 同心圆算法, 效率太低, 故仅在半径小于 4 时处理
  24.     for /l %%l in (-!rMax! 1 !rMax!) do (
  25.       set "L="
  26.       set /a "a=%%l, t=a>>31, a=(a+t)^t"
  27.       for /l %%c in (-!rMax! 1 !rMax!) do (
  28.         set /a "b=%%c, t=b>>31, b=(b+t)^t"
  29.         set /a "t=(a-b)>>31, r=(t&b)|(~t&a), rd=r-rMax-1"
  30.         if !r!==0 (
  31.           if !rMax! geq 3 (set "L=!L!1") else set "L=!L!!CS:~-%%p,1!"
  32.         ) else (
  33.           if !rd! lss -3 (
  34.             set "L=!L!0"
  35.           ) else (
  36.             for %%i in (!rd!) do set "L=!L!!CS:~%%i,1!"
  37.           )
  38.         )
  39.       )
  40.       echo,!L!
  41.     )
  42.   ) else ( rem 在半径不小于 4 时, 切换为高效率算法
  43.     set "S3=" & set "E3="
  44.     for %%i in (1 2 3) do (
  45.       set /a "s=2*(rMax-%%i)+1"
  46.       for %%s in (!s!) do (
  47.         set "S3=!S3!!NL!!CSR:~0,%%i!!_%%i:~-%%s!!CS:~-%%i!"
  48.         set "E3=!CSR:~0,%%i!!_%%i:~-%%s!!CS:~-%%i!!NL!!E3!"
  49.       )
  50.     )
  51.     set /a "s=rMax-3"
  52.     for %%s in (!s!) do set "LC=xyz!_0:~-%%s!1!_0:~-%%s!zyx"
  53.     set "Ln=!LC:1=0!"
  54.     echo,!S3:~1!
  55.     for /l %%i in (1 1 !s!) do echo,!Ln!
  56.     echo,!LC!
  57.     for /l %%i in (1 1 !s!) do echo,!Ln!
  58.     echo,!E3:~0,-1!
  59.   )
  60.   pause & cls
  61. )
复制代码
1

评分人数

    • plp626: 很好。。。技术 + 1

TOP

返回列表