批处理之家's Archiver

happy886rr 发表于 2017-3-16 21:28

在控制台打印金字塔

题目要求:
    用字符*打印一个金字塔,不限语言。

效果:
[attach]10525[/attach]

实现:[code]@echo off
set "str=                                           ******************************************"
for /l %%i in (1,1,38) do (
        call,echo,%%str:~%%i,%%i%%
)
set/p=[/code]欢迎帖码,语言不限。

taofan712 发表于 2017-3-16 21:57

我要来答,给我3分钟。

codegay 发表于 2017-3-16 22:03

[code]>>> print(''.join([('*'*r).center(17,'-')+"\n" for r in range(1,18,2)]))
--------*--------
-------***-------
------*****------
-----*******-----
----*********----
---***********---
--*************--
-***************-
*****************[/code]

pcl_test 发表于 2017-3-16 22:08

ps[code]$n=9;1..$n|%{' '*($n-$_)+'*'*(2*$_-1)}[/code]

taofan712 发表于 2017-3-16 22:23

[code]
@echo off & setlocal EnableDelayedExpansion
set max=78
for /l %%$ in (1 1 10) do (
    set a=!a!**
    call :zhong !a!
)
pause
:zhong
set s=%1
for /l %%# in (1,2,!max!) do if "!s:~%max%,1!" == "" set "s= !s! "
set s=!s:~1,%max%!& echo;!s!
exit /b
[/code]

bbaa 发表于 2017-3-16 22:24

仅支持中文效率极低:[url]http://www.bathome.net/thread-43049-1-1.html[/url]

codegay 发表于 2017-3-16 23:32

:lol 这个贴应该发到出题区。

老刘1号 发表于 2017-3-16 23:34

[i=s] 本帖最后由 老刘1号 于 2017-3-18 18:25 编辑 [/i]

受win7CMD特性限制,只支持XP系统。[code]@echo off
Setlocal enabledelayedexpansion
::CODER BY Old.Liu POWERD BY iBAT
set /p long=Input:
set /a long=long/2
set /a long=long*2+1
set /a half=long/2
set /a i=1
for /l %%a in (1 1 !half!) do set/p= <nul
for /l %%a in (1 1 !i!) do set/p=*<nul
echo.
if !long! == 1 goto end
:loop
set /a i+=2
set /a half-=1
for /l %%a in (1 1 !half!) do set/p= <nul
for /l %%a in (1 1 !i!) do set/p=*<nul
echo.
if "!i!" equ "!long!" goto end
goto loop
:end
pause
[/code]

happy886rr 发表于 2017-3-17 00:03

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197133&ptid=43522]7#[/url] [i]codegay[/i] [/b]

出题区权限不够,挑战区这题又太简单。

taofan712 发表于 2017-3-17 00:15

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197136&ptid=43522]9#[/url] [i]happy886rr[/i] [/b]

继续搞点这种题目啊,趣味性十足。

taofan712 发表于 2017-3-17 09:21

被截图蒙蔽了,实际上并没有居中的要求?
那么可以减几行[code]
@echo off&setlocal enabledelayedexpansion
set "kong="
for /l %%a in (1,1,17) do set "kong=!kong! "
set "s=*"
for /l %%a in (1,1,17) do (
   echo !kong!!s!
   set "kong=!kong:~1!"
   set "s=!s!**!
)
pause
[/code]

taofan712 发表于 2017-3-17 09:29

嗯嗯,还可以再少几行[code]
@set s=                 *
:r
@echo;%s%&if "%s:~0,1%"==" " set s=%s:~1%%s:~-1%%s:~-1%&goto :r
@pause
[/code]

taofan712 发表于 2017-3-17 09:39

这样判断的话,又可以再少几个字[code]@set s=                 *
:r
@echo(%s%&if %s:~,1%*==* set s=%s:~1%**&goto:r
@pause[/code]

523066680 发表于 2017-3-17 10:09

[font=consolas][size=15px][list=1][*]my [color=#007800]$s[/color]=[color=#ff0000]"          *          [color=#000099][b]\n[/b][/color]"[/color];
[*][color=#000000][b]do[/b][/color] [color=#7a0874][b]{[/b][/color] print [color=#007800]$s[/color] [color=#7a0874][b]}[/b][/color] [color=#000000][b]while[/b][/color] [color=#7a0874][b]([/b][/color] [color=#007800]$s[/color]=~s[color=#000000][b]/[/b][/color] [color=#7a0874][b]([/b][/color]\[color=#000000][b]*[/b][/color]+[color=#7a0874][b])[/b][/color] [color=#000000][b]/*[/b][/color][color=#007800]$1[/color][color=#000000][b]*/[/b][/color] [color=#7a0874][b])[/b][/color];
[/list][/size][/font]

taofan712 发表于 2017-3-17 10:14

用goto取代if,又能减少几个字节。[code]
@set s=                 O
:O
@echo;%s%&set s=%s:~1%OO&goto%s:~,2%O
:OO
pause
[/code]

happy886rr 发表于 2017-3-17 11:00

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197151&ptid=43522]15#[/url] [i]taofan712[/i] [/b]
感觉你已经做到极限了。

taofan712 发表于 2017-3-17 11:36

[i=s] 本帖最后由 taofan712 于 2017-3-17 11:43 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197155&ptid=43522]16#[/url] [i]happy886rr[/i] [/b]

不,还没有,我从你这道题收获颇丰啊!
我后来有思考过,goto其实还可以减少一个标签,而且如果为了减少字节数,我从你用“set/p=”代替常见的pause,想到不如用ftp或者more,毕竟又少了两三个字符。
这样,九层,最终66个字节吧。

523066680 发表于 2017-3-17 17:55

接下来可以打印字符版 Sirpinsiki 三角形

happy886rr 发表于 2017-3-17 21:59

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197185&ptid=43522]18#[/url] [i]523066680[/i] [/b]
那个Sirpinsiki太难了,我估计只有你跟aa77dd@163.com 兄能实现。

523066680 发表于 2017-3-17 22:43

[i=s] 本帖最后由 523066680 于 2017-3-18 08:26 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=197193&ptid=43522]19#[/url] [i]happy886rr[/i] [/b]

夸张了 [img]http://bbs.bathome.net/images/smilies/coolmonkey/15.gif[/img],没试过字符版,好像可以先从直角开始。[code]my $floor = 5;
my $s = " "x$floor;
my @line;

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

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

print join("\n", @line);[/code][align=left][font=Consolas]*   
**   
***  
****
*****
*    *   
**   **   
***  ***  
**** ****
**********
*    *    *   
**   **   **   
***  ***  ***  
**** **** ****
***************
*    *    *    *   
**   **   **   **   
***  ***  ***  ***  
**** **** **** ****
********************
*    *    *    *    *   
**   **   **   **   **   
***  ***  ***  ***  ***  
**** **** **** **** ****
*************************
[/font][/align]

发现差远了,晚点儿补上

老刘1号 发表于 2017-3-17 23:05

[i=s] 本帖最后由 老刘1号 于 2017-3-17 23:48 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197124&ptid=43522]1#[/url] [i]happy886rr[/i] [/b]
兼容WIN7的来了[code]@echo off
Setlocal enabledelayedexpansion
::CODER BY Old.Liu POWERD BY iBAT
set /p long=Input:
set /a long=long/2
set /a long=long*2+1
set /a half=long/2
set /a i=1
set a=.
for /l %%a in (1 1 !half!) do set "a=!a! "
for /l %%a in (1 1 !i!) do set a=!a!*
echo!a!
if !long! == 1 goto end
:loop
set /a i+=2
set /a half-=1
set a=.
for /l %%a in (1 1 !half!) do set "a=!a! "
for /l %%a in (1 1 !i!) do set a=!a!*
echo!a!
if "!i!" equ "!long!" goto end
goto loop
:end
pause[/code]

happy886rr 发表于 2017-3-17 23:14

[i=s] 本帖最后由 happy886rr 于 2017-3-17 23:51 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197200&ptid=43522]21#[/url] [i]老刘1号[/i] [/b]
最后一版正常。

老刘1号 发表于 2017-3-17 23:21

[i=s] 本帖最后由 老刘1号 于 2017-3-18 00:07 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197201&ptid=43522]22#[/url] [i]happy886rr[/i] [/b]


    好的,收到
不用set输出的话……这种题不准备用批写了,太费劲

老刘1号 发表于 2017-3-17 23:26

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197163&ptid=43522]17#[/url] [i]taofan712[/i] [/b]


    现在这个时代,代码不仅是给机器看的,其他人也需要看,也需要理解,这样才能一起做成大的项目
过度的精简代码失去的东西比得到的多的多。
这也是为何会有注释,有缩进
编程的最高境界就是能让你写的程序自成文章

523066680 发表于 2017-3-18 09:37

[i=s] 本帖最后由 523066680 于 2017-3-18 09:56 编辑 [/i]

[code]my @lines = "*";
func( \@lines, 1 );

sub func
{
    my ($ref, $lv) = (shift, shift);
    my @tri;
    my $top = $#$ref + 1;

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

    ( $lv <= 3 ) ?
         func( \@tri, $lv+1 ) : print join("\n", @tri);
}[/code][code]               *               
              * *              
             *   *            
            * * * *            
           *       *           
          * *     * *         
         *   *   *   *         
        * * * * * * * *        
       *               *      
      * *             * *      
     *   *           *   *     
    * * * *         * * * *   
   *       *       *       *   
  * *     * *     * *     * *  
*   *   *   *   *   *   *   *
* * * * * * * * * * * * * * * *[/code]

codegay 发表于 2017-3-18 10:40

:curse: Writing Code That Nobody Else Can Read.

pcl_test 发表于 2017-3-18 11:47

[code]@echo off&setlocal enabledelayedexpansion
set level=4
set /a n=100000000,m=1
for /l %%a in (1 1 %level%) do set /a m*=2
set /a a=n+2*m,aa=m-1+n,m=n+m
for /l %%a in (%n% 1 %a%) do set "#%%a= "
set #%m%=*
for /l %%a in (%n% 1 %aa%) do (
    set "s="&set r=*
    for /f "tokens=1* delims==" %%b in ('set #') do set "s=!s!%%c"
    echo;!s!
    set /a b=m-%%a+n,c=m+%%a-n
    for /l %%c in (!b! 1 !c!) do (
        set /a d=%%c-1,e=%%c+1,h=c+1
        for %%i in (!d!) do set f=!#%%i!
        for %%j in (!e!) do set g=!#%%j!
        if "!f!" neq "!g!" (set t=*) else set "t= "
        for %%i in (!d!) do set #%%i=!r!
        set r=!t!
    )
    set #!c!=!t!&set #!h!=*
)
pause[/code]

老刘1号 发表于 2017-3-18 14:21

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197196&ptid=43522]20#[/url] [i]523066680[/i] [/b][code]
'&@(cls&Echo off 2>nul 3>nul)
'&set /p long=输入长度:
'&set /p floor=输入层数:
'&Cscript -nologo -e:vbscript "%~0" "%floor%" "%Long%"
'&Pause&Exit
floor_=WScript.Arguments(0)
long_=WScript.Arguments(1)
For a = 1 To floor_
        For i = 1 To long_
                For b = 1 To a
                        For j = 1 To i
                                Echo=Echo&"*"
                        Next
                        For j = i To long_
                                Echo=Echo&" "
                        Next
                Next
                Echo=Echo&vbNewLine
        Next
Next
WScript.Echo echo
[/code]

523066680 发表于 2017-3-18 14:26

[i=s] 本帖最后由 523066680 于 2017-3-18 14:29 编辑 [/i]

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=197218&ptid=43522]28#[/url] [i]老刘1号[/i] [/b]


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

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

[url]https://en.wikipedia.org/wiki/Sierpinski_triangle[/url]

老刘1号 发表于 2017-3-18 18:16

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197219&ptid=43522]29#[/url] [i]523066680[/i] [/b]


    酱紫啊……

页: [1] 2

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.