在控制台打印金字塔
题目要求:用字符*打印一个金字塔,不限语言。
效果:
[attach]10525[/attach]
实现:[code]@echo off
set "str= ******************************************"
for /l %%i in (1,1,38) do (
call,echo,%%str:~%%i,%%i%%
)
set/p=[/code]欢迎帖码,语言不限。 我要来答,给我3分钟。 [code]>>> print(''.join([('*'*r).center(17,'-')+"\n" for r in range(1,18,2)]))
--------*--------
-------***-------
------*****------
-----*******-----
----*********----
---***********---
--*************--
-***************-
*****************[/code] ps[code]$n=9;1..$n|%{' '*($n-$_)+'*'*(2*$_-1)}[/code] [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] 仅支持中文效率极低:[url]http://www.bathome.net/thread-43049-1-1.html[/url] :lol 这个贴应该发到出题区。 [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] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197133&ptid=43522]7#[/url] [i]codegay[/i] [/b]
出题区权限不够,挑战区这题又太简单。 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197136&ptid=43522]9#[/url] [i]happy886rr[/i] [/b]
继续搞点这种题目啊,趣味性十足。 被截图蒙蔽了,实际上并没有居中的要求?
那么可以减几行[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] 嗯嗯,还可以再少几行[code]
@set s= *
:r
@echo;%s%&if "%s:~0,1%"==" " set s=%s:~1%%s:~-1%%s:~-1%&goto :r
@pause
[/code] 这样判断的话,又可以再少几个字[code]@set s= *
:r
@echo(%s%&if %s:~,1%*==* set s=%s:~1%**&goto:r
@pause[/code] [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] 用goto取代if,又能减少几个字节。[code]
@set s= O
:O
@echo;%s%&set s=%s:~1%OO&goto%s:~,2%O
:OO
pause
[/code] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197151&ptid=43522]15#[/url] [i]taofan712[/i] [/b]
感觉你已经做到极限了。 [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个字节吧。 接下来可以打印字符版 Sirpinsiki 三角形 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197185&ptid=43522]18#[/url] [i]523066680[/i] [/b]
那个Sirpinsiki太难了,我估计只有你跟aa77dd@163.com 兄能实现。 [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]
发现差远了,晚点儿补上 [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] [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]
最后一版正常。 [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输出的话……这种题不准备用批写了,太费劲 [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197163&ptid=43522]17#[/url] [i]taofan712[/i] [/b]
现在这个时代,代码不仅是给机器看的,其他人也需要看,也需要理解,这样才能一起做成大的项目
过度的精简代码失去的东西比得到的多的多。
这也是为何会有注释,有缩进
编程的最高境界就是能让你写的程序自成文章 [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] :curse: Writing Code That Nobody Else Can Read. [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] [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] [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] [b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=197219&ptid=43522]29#[/url] [i]523066680[/i] [/b]
酱紫啊……
页:
[1]
2