我们都知道冷酷的S(也叫超人S,圣女,超级,溜冰,尖头,涂鸦等):世界各地数十亿的小学生都画了这幅画,并立刻为自己感到骄傲。如果你已经忘记或有一个完全不酷的童年,这里有一张说“酷S”的图片:
给定一个比例因子n
作为输入(其中\$1\leq n\leq 20\$),输出ASCII艺术中的Cool S。
来自“酷S”的维基百科页面:
当n
=1时,冷却S为:
^
/ \
/ \
/ \
| | |
| | |
\ \ /
\ \/
/\ \
/ \ \
| | |
| | |
\ /
\ /
\ /
v
对于不同的n
值,只需将输出n
增大一倍。例如,n
=2:
^
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
v
请注意,垂直段长两倍,垂直线之间的间距比垂直线宽两倍。
当n
=3:
^
/ \
/ \
/ \
/ \
/ \
/ \
/ \
| | |
| | |
| | |
| | |
| | |
| | |
\ \ /
\ \ /
\ \ /
\ \/
/\ \
/ \ \
/ \ \
/ \ \
| | |
| | |
| | |
| | |
| | |
| | |
\ /
\ /
\ /
\ /
\ /
\ /
\ /
v
注:虽然不是必需的,但您的代码也可能支持n
=0:
^
/ \
\\/
/\\
\ /
v
以字节为单位的最短程序获胜。
发布于 2018-07-23 14:29:07
函数本身需要435字节。当然还有改进的余地,“高水平”是通过分析在哪里放置哪个字符的规则(最终S是点对称的),和“低水平”,通过古典高尔夫(可能拔出另一个变量或合并两个for
-loops)。但这是第一次使用这种相当不友好的语言:
import static java.util.Arrays.*;
import static java.lang.System.*;
public class CoolS
{
public static void main(String[] args)
{
print(1);
print(2);
print(3);
}
static void print(int n){int i,r,d=3+6*n,w=3+n*4,h=6+n*10,m=n+n,v=w/2,k=h-1,j=w-1;char t[],S='/',B='\\',P='|',s[][]=new char[h][w];for(char x[]:s)fill(x,' ');s[0][v]='^';s[k][v]='v';for(i=0;i<1+m;i++){r=i+1;t=s[r];t[v-r]=S;t[v+r]=B;t=s[k-r];t[v-r]=B;t[v+r]=S;}for(i=0;i
发布于 2022-02-10 05:43:22
i'0'-i1+:?!v1-'0'-$a*+1v
v < <
>~ :1-2*3+ >1-' 'v v oa&0~~~<
v&1:oa*2:~o'^'^?:o < >~'/'o$:v <^ <
>>' 'o1-: ?v v >@ '\'o$v v -1o< > v >:?vv^ -1< ^ <
:^ < ~ ~> \:>:?v v >'/'v^o' '^!?:-1<:< > ' 'o^ >'\'o:1-?v^
- vo' '<:&o'/' < < ^^?:o' '\ \ >' '/'\'\~$^ > o:?v~1>$ :?v$^ ~! oa $+2$-1 <
^1\1-:?^~'\'oao v / \-1<:@@~o/o1- v^a< >1+^v:$-2$@@:>1-' 'o:?v^ >~'\'o$v^ oa<
> ^ /-1 /-1 / \ \ \:0:< ^ < v -1< :v o' '<^ +1$-2 < v -1<
>~&~1& >:2*:1->'|'o1>@@:>' 'o1-:?^~@'|'o:?^~ao: ?^~&?^ 1+2*0 >:>:?!^' 'o^ >>1-: ?^~'/'o:2-?^@@2*ao>' 'o:?^'v'o ;
以一个数字1-99
作为输入并绘制Cool。程序只使用一个堆栈来存储空格数。它几乎不是高尔夫球,编码只是为了练习和乐趣:D 在网上试试!。
发布于 2022-02-09 13:52:37
( {2*$~1}) ^\n(( {#3-1}|$1)/( $4| )\\\n){#1+1}((\|$1\|$1\|\n){#1})(( $8|)(\\$1\\)( {#10-2}|$1)/\n){$~1+1}(( {#12-1}|$8)/( $13|)$9\n){$~1+1}$5(( $15|)\\( {#16-2}|$4)/\n){#1+1}$1 v
将输入作为命令行参数。在这里试试!
哇哦,这太长了。这其实并不是非常复杂,但是,一旦你获得了一些在再生中打高尔夫球的基本原则,它只是一遍又一遍地使用相同的技术。
( {2*$~1})
第1组:接受命令行参数($~1
),乘以2,并添加许多空格。
^\n
用一个空格( ^
)和一个换行符来完成第一行。
(...){#1+1}
组2生成/ \
节的一行。重复( 1组长度加1次)。它包括第3组和第4组。
( {#3-1}|$1)/
第3组:添加空格,比上次匹配第3组时少一个;或者,如果第3组以前没有匹配,则从第1组(arg *2空格)的内容开始。在第3组之后,添加一个正斜杠。
( $4| )\\\n
第4组:添加空格,比上次匹配第4组时多两个;或者,如果第4组以前没有匹配,则从一个空格开始。在第4组之后,添加反斜杠和换行符。
((\|$1\|$1\|\n){#1})
第5组是整个垂直线部分,我们正在捕捉这个部分,因为我们可以在以后逐字重用它。具体而言,这是第6组的重复( 1组长度),包括:管道、第1组、管道、第1组、管道、换线。
(...){$~1+1}
组7生成\ \/
节的一行。重复它(论点加1次)。它包含第8、第9和第10组。
( $8|)
第8组:添加空格,比上次匹配第8组时多一次;或者,如果第8组以前没有匹配,则以空字符串开头。
(\\$1\\)
第9组:反斜杠,第1组,反斜杠(捕获以供稍后重用)。
( {#10-2}|$1)/\n
第10组:添加空格,比上次匹配10组时少两个;或者,如果10组以前没有匹配,则从第1组的内容开始。在第10组之后,添加一个正斜杠和一个换行符。
(...){$~1+1}
组11生成/\ \
节的一行。重复它(论点加1次)。它包括第12组和第13组。
( {#12-1}|$8)/
第12组:添加空格,比我们上次匹配第12组时少一个;或者,如果第12组以前没有匹配,那么从第8组的最新内容开始。在第12组之后,添加一个正斜杠。
( $13|)$9\n
第13组:添加空格,比上次匹配第13组时多两次;或者,如果第13组以前没有匹配,则以空字符串开头。在第13组之后,添加第9组的内容(两个反斜杠之间有一些空格)和一个换行符。
$5
再次添加第5组的内容(垂直管道部分)。
(...){#1+1}
第14组生成\ /
部分的一行。重复( 1组长度加1次)。它包括第15和第16组。
( $15|)\\
第15组:添加空格,比上次匹配15组时多一次;或者,如果15组以前没有匹配,则以空字符串开头。在第15组后加一个反斜杠。
( {#16-2}|$4)/\n
第16组:添加空格,比我们上次匹配16组时少两个;或者,如果16组以前没有匹配,那么从第4组的最新内容开始。在第16组之后,添加一个正斜杠和一个换行符。
$1 v
对于最后一行,添加组1、空格和v
的内容。
https://codegolf.stackexchange.com/questions/169045
复制