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

在控制台打印金字塔

[复制链接]
 楼主| 发表于 2017-3-17 11:00:32 | 显示全部楼层
回复 15# taofan712
感觉你已经做到极限了。
发表于 2017-3-17 11:36:29 | 显示全部楼层
本帖最后由 taofan712 于 2017-3-17 11:43 编辑

回复 16# happy886rr

不,还没有,我从你这道题收获颇丰啊!
我后来有思考过,goto其实还可以减少一个标签,而且如果为了减少字节数,我从你用“set/p=”代替常见的pause,想到不如用ftp或者more,毕竟又少了两三个字符。
这样,九层,最终66个字节吧。
发表于 2017-3-17 17:55:44 | 显示全部楼层
接下来可以打印字符版 Sirpinsiki 三角形
 楼主| 发表于 2017-3-17 21:59:27 | 显示全部楼层
回复 18# 523066680
那个Sirpinsiki太难了,我估计只有你跟aa77dd@163.com 兄能实现。
发表于 2017-3-17 22:43:33 | 显示全部楼层
本帖最后由 523066680 于 2017-3-18 08:26 编辑

回复 19# happy886rr

夸张了 ,没试过字符版,好像可以先从直角开始。
  1. my $floor = 5;
  2. my $s = " "x$floor;
  3. my @line;

  4. for my $n ( 0 .. $floor-1 )
  5. {
  6.     $s=~s/ /*/;
  7.     $line[$n] = $s;
  8. }

  9. for my $n ( $floor .. $floor*$floor - 1 )
  10. {
  11.     $line[$n] = $line[$n%$floor] x ($n/$floor+1);
  12. }

  13. print join("\n", @line);
复制代码
*   
**   
***  
****
*****
*    *   
**   **   
***  ***  
**** ****
**********
*    *    *   
**   **   **   
***  ***  ***  
**** **** ****
***************
*    *    *    *   
**   **   **   **   
***  ***  ***  ***  
**** **** **** ****
********************
*    *    *    *    *   
**   **   **   **   **   
***  ***  ***  ***  ***  
**** **** **** **** ****
*************************


发现差远了,晚点儿补上
发表于 2017-3-17 23:05:29 | 显示全部楼层
本帖最后由 老刘1号 于 2017-3-17 23:48 编辑

回复 1# happy886rr
兼容WIN7的来了
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. ::CODER BY Old.Liu POWERD BY iBAT
  4. set /p long=Input:
  5. set /a long=long/2
  6. set /a long=long*2+1
  7. set /a half=long/2
  8. set /a i=1
  9. set a=.
  10. for /l %%a in (1 1 !half!) do set "a=!a! "
  11. for /l %%a in (1 1 !i!) do set a=!a!*
  12. echo!a!
  13. if !long! == 1 goto end
  14. :loop
  15. set /a i+=2
  16. set /a half-=1
  17. set a=.
  18. for /l %%a in (1 1 !half!) do set "a=!a! "
  19. for /l %%a in (1 1 !i!) do set a=!a!*
  20. echo!a!
  21. if "!i!" equ "!long!" goto end
  22. goto loop
  23. :end
  24. pause
复制代码
 楼主| 发表于 2017-3-17 23:14:55 | 显示全部楼层
本帖最后由 happy886rr 于 2017-3-17 23:51 编辑

回复 21# 老刘1号
最后一版正常。
发表于 2017-3-17 23:21:07 | 显示全部楼层
本帖最后由 老刘1号 于 2017-3-18 00:07 编辑

回复 22# happy886rr


    好的,收到
不用set输出的话……这种题不准备用批写了,太费劲
发表于 2017-3-17 23:26:58 | 显示全部楼层
回复 17# taofan712


    现在这个时代,代码不仅是给机器看的,其他人也需要看,也需要理解,这样才能一起做成大的项目
过度的精简代码失去的东西比得到的多的多。
这也是为何会有注释,有缩进
编程的最高境界就是能让你写的程序自成文章
发表于 2017-3-18 09:37:18 | 显示全部楼层
本帖最后由 523066680 于 2017-3-18 09:56 编辑
  1. my @lines = "*";
  2. func( \@lines, 1 );

  3. sub func
  4. {
  5.     my ($ref, $lv) = (shift, shift);
  6.     my @tri;
  7.     my $top = $#$ref + 1;

  8.     grep { push @tri, "$_ $_" } @$ref;
  9.     grep { unshift @tri, " "x$top .$_ ." "x$top } ( reverse @$ref );

  10.     ( $lv <= 3 ) ?
  11.          func( \@tri, $lv+1 ) : print join("\n", @tri);
  12. }
复制代码
  1.                *               
  2.               * *              
  3.              *   *            
  4.             * * * *            
  5.            *       *           
  6.           * *     * *         
  7.          *   *   *   *         
  8.         * * * * * * * *        
  9.        *               *      
  10.       * *             * *      
  11.      *   *           *   *     
  12.     * * * *         * * * *   
  13.    *       *       *       *   
  14.   * *     * *     * *     * *  
  15. *   *   *   *   *   *   *   *
  16. * * * * * * * * * * * * * * * *
复制代码

评分

参与人数 1技术 +1 收起 理由
happy886rr + 1 666

查看全部评分

发表于 2017-3-18 10:40:05 | 显示全部楼层
Writing Code That Nobody Else Can Read.
发表于 2017-3-18 11:47:41 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set level=4
  3. set /a n=100000000,m=1
  4. for /l %%a in (1 1 %level%) do set /a m*=2
  5. set /a a=n+2*m,aa=m-1+n,m=n+m
  6. for /l %%a in (%n% 1 %a%) do set "#%%a= "
  7. set #%m%=*
  8. for /l %%a in (%n% 1 %aa%) do (
  9.     set "s="&set r=*
  10.     for /f "tokens=1* delims==" %%b in ('set #') do set "s=!s!%%c"
  11.     echo;!s!
  12.     set /a b=m-%%a+n,c=m+%%a-n
  13.     for /l %%c in (!b! 1 !c!) do (
  14.         set /a d=%%c-1,e=%%c+1,h=c+1
  15.         for %%i in (!d!) do set f=!#%%i!
  16.         for %%j in (!e!) do set g=!#%%j!
  17.         if "!f!" neq "!g!" (set t=*) else set "t= "
  18.         for %%i in (!d!) do set #%%i=!r!
  19.         set r=!t!
  20.     )
  21.     set #!c!=!t!&set #!h!=*
  22. )
  23. pause
复制代码

评分

参与人数 2技术 +2 收起 理由
523066680 + 1 斯国一
happy886rr + 1 666

查看全部评分

发表于 2017-3-18 14:21:30 | 显示全部楼层
回复 20# 523066680

  1. '&@(cls&Echo off 2>nul 3>nul)
  2. '&set /p long=输入长度:
  3. '&set /p floor=输入层数:
  4. '&Cscript -nologo -e:vbscript "%~0" "%floor%" "%Long%"
  5. '&Pause&Exit
  6. floor_=WScript.Arguments(0)
  7. long_=WScript.Arguments(1)
  8. For a = 1 To floor_
  9.         For i = 1 To long_
  10.                 For b = 1 To a
  11.                         For j = 1 To i
  12.                                 Echo=Echo&"*"
  13.                         Next
  14.                         For j = i To long_
  15.                                 Echo=Echo&" "
  16.                         Next
  17.                 Next
  18.                 Echo=Echo&vbNewLine
  19.         Next
  20. Next
  21. WScript.Echo echo
复制代码
发表于 2017-3-18 14:26:09 | 显示全部楼层
本帖最后由 523066680 于 2017-3-18 14:29 编辑

回复 28# 老刘1号


    其实我20楼的那个不是标准的,上午想起来不对马上打草稿补了一发~

原版的是有一种递归性质,不管从哪一部分放大看都有相似性,而且越大越密集越好看

https://en.wikipedia.org/wiki/Sierpinski_triangle
发表于 2017-3-18 18:16:31 | 显示全部楼层
回复 29# 523066680


    酱紫啊……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 22:02 , Processed in 0.020693 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表