Lir*_*una 61 language-agnostic code-golf rosetta-stone
按字符数最短的代码,根据用户输入输出玩砖塔系列.
输入将是一系列数字(正数,负数和零),表示当前立方体塔在其索引之后的高度.高度为0表示没有塔并且间隔开.
立方体塔由堆积的立方体组成.如果当前索引上的输入数字为正,则立方体会上升,如果输入数字为负数,则立方体会下降.使用以下4行绘制单个立方体:
__ /__ /| | | | |___|/
立方体是3D - 这意味着当两个塔彼此相邻放置时它们彼此隐藏,产生假视角.
可以假设所有输入都是有效且没有错误 - 每个数字在一行上用空格分隔,至少有一个数字.
Input: 2 -3 -2 1 2 -1 Output: __ __ /__ /| /__ /| | | | _| | | |___|/| /__|___|/| | | |__ _| | | |__ |___|/__ /__|___|___|/__ /| | | | | | | | |___|___|/| |___|/ | | | | |___|___|/ | | | |___|/
Input: 1 2 3 4 -2 4 3 2 1 Output: __ __ /__ /| /__ /| _| | | | | |__ /__|___|/| |___|/__ /| _| | | | | | | |__ /__|___|___|/| |___|___|/__ /| _| | | | | | | | | |__ /__|___|___|___|/| |___|___|___|/__ /| | | | | | |_| | | | | | |___|___|___|___|/__|___|___|___|___|/ | | | |___|/| | | | |___|/
Input: 1 3 3 7 0 -2 -2 Output: __ /__ /| | | | |___|/| | | | |___|/| | | | |___|/| __ _| | | /__ /__|___|/| | | | | | |___|___|___|/| _| | | | | /__|___|___|___|/| | | | | | | __ __ |___|___|___|___|/ /__ /__ /| | | | | |___|___|/| | | | | |___|___|/
代码计数包括输入/输出(即完整程序).
mob*_*mob 40
此条目的灵感来自gnibbler的Ruby条目,包括有关在代码中嵌入多维数据集的部分.还要感谢Kinopiko在4 arg版本上教我substr
.
@O=($/.$"x99)x99;map{for$n(0..$_-1,$_..-1){map{substr$O[50-2*$n+$_],$W+4/$_,6,
(_,"__"
,"/__ /|",
"| | |",
"|___|/")[$_]}1..4}$W+=4}@ARGV;print grep/\S/,@O
Run Code Online (Sandbox Code Playgroud)
说明:
第1行:选择多维数据集的位置
第2-5行:将立方体放在多维数据集的位置,打印
Joh*_*ooy 39
可变字符串;)没有任意"99"限制.pfft:p但是
必须丢失源中立方体的图片
S=gets.split.map{|x|x.to_i}<<0
S.max.downto(S.min){|y|e=" ";q=e*3;r=e*3
S.map{|x|a=0,x;if(w=a.min)<=y&&x!=0&&y<z=a.max
r[-3,4]="| | |";q[-3,4]="|___|/"+(y>w ?"|":e)else(z=z!=y)?q+=e*4:q[-2,4]="/__ /|"
r+=z ?e*4:"__ "end}
puts r,q}
Run Code Online (Sandbox Code Playgroud)
删除我放在那里的额外空间,以获得立方体的漂亮图片
S=gets.split.map{|x|x.to_i}<<0
S.max.downto(S.min){|y|e=" ";q=e*3;r=e*3
S.map{|x|a=0,x;if(w=a.min)<=y&&x!=0&&y<=z=a.max
if z==y;r+="__ "
q[-2,3]="/__ /|"else
r[-3,4]="| | |"
q[-3,4]="|___|/"+(y>w ?e:"|")end
else r+=e*4;q+=e*4 end}
puts r,q}
Run Code Online (Sandbox Code Playgroud)
$ echo 1 3 7 3 3 |ruby pc.rb __ /__ /| | | | |___|/| | | | |___|/| | | | |___|/| _| | |__ __ /__|___|/__ /__ /| | | | | | | |___|___|___|___|/| _| | | | | | /__|___|___|___|___|/| | | | | | | | |___|___|___|___|___|/
第二个for循环使用制表符缩进
S=map(int,raw_input().split())+[0]
for y in range(max(S),min(S)-1,-1):
q=r=e=" "*4
for x in S:
w=x*(x<0);z=x*(x>0)
if w<=y<z:r=r[:-3]+"| | |";q=q[:-3]+"|___|/"+" |"[y>w]
elif(y==z)*x:q=q[:-2]+"/__ /|";r+="__ "
else:q+=e;r+=e
print r+"\n"+q
Run Code Online (Sandbox Code Playgroud)
S=map(int,raw_input().split())+[0]
for Y in range(max(S),min(S)-1,-1):
Q=R="";B=s=t=" "*4;N=0
for y in S:
if(y>0)*(y==Y)+(Y==0)*(y<0):
q="_ _";r=" /__";s="_ ";t=" /| "
if(N<y>0)+(N==0):q=" _"
if y<N>0:q="| |_";r="|/__"
elif(y>Y>=0)+(y<=Y<0):q="| ";r="|___";s="| | ";t="|/"+("| "[(y==Y<0)+(Y==0)])+" "
else:q=s;r=t;s=t=B
Q+=q;R+=r;N=y
print Q.rstrip()+"\n"+R.rstrip()
Run Code Online (Sandbox Code Playgroud)
c=[]
n=99
$F.map{|e|e=e.to_i
c<<(e<0?[e,-1]:[0,e-1])}
m=[]
x=0
c.map{|d|x+=4
k,l=d
(k+n..l+n).map{|y|y*=2
[[3,3,2,'__'],[2,1,6,'/__ /|'],[1,0,7,'| | |'],[0,0,6,'|___|/']].map{|e|a,b,c,s=e
(m[y+a]||=' '*79)[x+b,c]=s}}}
puts m.compact.reverse
Run Code Online (Sandbox Code Playgroud)
运行 ruby -n -a v2.rb
这个条目略微过度设计,因为它可以在任何级别开始和结束堆栈,而不仅仅是0.没有办法在"竞争版本"中指定这个,但是如果你替换前4行,c=eval $_;n=99
那么它会降到203字节,你可以做:<
[[-3,3],[-3,-2],[2,3],[-3,-3],[-2,-1],[3,3],[2,2],[1,1],[0,0]]
Run Code Online (Sandbox Code Playgroud)
__ __ __ /__ /| /__ /| /__ /| | | | | | | | | |__ |___|/| |___|/| |___|/__ /| | | | | | | | | |__ |___|/| |___|/ |___|/__ /| | | | | | |__ |___|/| |___|/__ /| | | | __ | | | |___|/| /__ /| |___|/ | | |__ | | | |___|/__ /| |___|/| | | | | _| | | |___|___|/| /__|___|/ | | | | | | | |___|___|/ |___|/
非常不优化.我的第一个Befunge程序.=]
>~:88+`v6 >11p>:!|v g13$< v $< 000090#8 + > >68*31p v > 1-:!|!:-1g14<p+g11g13+g12g 14< __ :* * 5 ^ < > 31pvvp16<>:41p1- 31g1+g :68*-!#^_ ^ /__ /||\-6 >>1-: |^8 < $<| `g16 $< < | | |>-*8 ^ ^ p11-2g11-1$ < >31g 11g+:::51g` | 1 |___|/ 8^0 >#-#< v ^< >51p^ < < |`0: p 56 p34:p30:p26:p25:p22:p21:p20:*68< ^ v95:< 6^ *2:* -10< >21g4+21p 11 1 >*- | > > 31g51gg,31g21g-3-!#v_v 1 >$ ^v< | ,+55-g16p15+1:g15 < |!-*48 <~> ^ ^ p13+1g13 < > ^ @
Haskell,349个字符:
r=replicate
f=foldl
k=repeat
o n a s=r n a++s++k a
main=do{a<-getLine;let{n=map read$words a;u=f max 0 n;d=f min 0 n;i=r(2*(1+u-d))$r(4*length n+3)' '};putStr$unlines$f(\j(x,n)->f(\i y->[[if a=='x'then b else a|(a,b)<-zip m n]|(m,n)<-zip(o(2*(u-y))(k 'x')$map(o(4*x)'x')["xxx__xx","x/__ /|","| | |","|___|/x"])i])j[1+min 0 n..max 0 n])i$zip[0..]n}
Run Code Online (Sandbox Code Playgroud)
换行很重要.如果您没有剥离尾随换行符,您将在底部打印一个额外的数字!在-
和之间有一个TAB0
" "4*:s%{~}%0+: $):
;0=:g;{2,{:r;s {[
- 0
-]$(:b\(:t\;=!t!0t<1b>*2*+*[{s}[{"__ "}{-2<"/__ /|"}]r={-3<["| | |""|___|/"["| "b!=]+]r=}]\=~+}%n}%
(:
g<!}do
Run Code Online (Sandbox Code Playgroud)
Golfscript - 163
0`+" ":s%{~}%:A$):y;0=1-:g;{2,{:r;3s*A{[y- 0y-]$(:b\(:t\;=!:j;[{4s*}[{"__ "}{-2<"/__ /|"}]r={-3<["| | |""|___|/"["| "b!=]+]r=}]0t=0t<1b>*2*+j*=~+}%n}%y(:y g>}do
Run Code Online (Sandbox Code Playgroud)
Golfscript - 165
0`+" ":s%{~}%:A$):y;0=1-:g;{2,{:r;3s*A{[y- 0y-]$(:b\(:t\;=!:j;[
{4s*}.{"__ "
}{-2<"/__ /|"}
{-3<"| | |"}
{-3<"|___|/"["| "b!=]+}]0t=2*0t<1b>*4*+r+j*=~+}%n}%y(:y g>}do
Run Code Online (Sandbox Code Playgroud)