挑战
您的程序或函数将接受来自STDIN的单个字符串输入或函数参数。您可以假设输入只包含字母字符(A)、空格和句号。输入是不区分大小写的,所以你应该像对待'A‘一样对待'a’。
对于字符串中的每个字符,您将按照以下规范输出建筑物的表示形式。
每栋建筑都必须有一个屋顶,在顶线上用下划线指定,然后在第二行上有斜线、空格、反斜杠。
_
/ \然后,您将有若干层,与字母编号(a=1,b=2,c=3等)相匹配。它由两边的墙(X)和中间的空间来表示。底层(只有底层)应该有一个基础,它是墙之间的下划线。像这样..。
|_|例如,“b”应该是这样的
_
/ \
| |
|_|现在,我们知道,非常高,狭窄的建筑物不能站立,必须在基础上变宽,所以没有一些额外的支撑,任何建筑物都不能站在三层以上。因此,每三个级别(不少于),你应该增加一个‘加宽层’。加宽层由一个斜线和反斜杠组成,它直接在下面的部分的墙壁上,下面的部分应该比上面的部分宽两个空间。额外的一层不包括在建筑物的高度上。
建筑物不应重叠,但两者之间不应有任何不必要的空间,而且地面总是平坦的,所以所有建筑物的基础都应该在同一层。
例如,'abcdefga‘将看起来像这样。
_
/ \
_ | |
_ / \ | |
_ / \ | | | |
/ \ | | | | / \
_ | | | | | | | |
_ / \ | | | | / \ | |
_ / \| | | | / \| | | | _
/ \| || |/ \| || |/ \/ \
|_||_||_||___||___||___||_____||_|字符串输入中的空格应用双空格表示。
字符串输入中的全部停止应该用像这样的碎石表示。
/\/\Input = Hello world.
产出=
_
/ \
| |
| |
| |
/ \
| |
| | _
| | / \
/ \ | |
| | | |
_ | | _ | |
/ \ | | / \ / \
| | / \ | | | |
| | | | | | | |
_ _ | | | | | | | | _
/ \ / \ / \ | | / \ / \ / \
| | | | | | / \ | | | | | |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | |
_ / \ / \ / \ | | / \ / \ / \
/ \ | | | | | | / \ | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | _ / \ / \ / \ | | / \ / \ / \
/ \ / \ | | | | | | / \ | | | | | | _
| | | | | | | | | | | | | | | | | | / \
| | | | | | | | | | | | | | | | | | | |
| | | | / \/ \/ \ | | / \/ \/ \ | |
/ \/ \| || || | / \| || || | | |
| || || || || | | || || || |/ \
|_____||___||_______||_______||_________| |_______________||_________||___________||_______||___|/\/\Input = lorem ipsum
_
/ \
_ | |
/ \ | |
_ | | | |
/ \ | | / \
| | _ | | | |
| | / \ / \ | |
_ | | | | | | | |
/ \ / \ | | | | / \
| | | | _ | | | | | | _
| | | | / \ / \ / \ | | / \
_ | | | | | | | | | | | | | |
/ \ / \ / \ | | | | | | / \ | |
| | | | | | | | | | | | | | | |
| | | | | | / \ / \ / \ | | / \
| | | | | | | | _ | | | | | | | |
/ \ / \ / \ | | / \ | | | | / \ | |
| | | | | | | | | | | | | | | | | |
| | | | | | / \ | | / \ / \ | | / \
| | | | | | | | | | | | | | | | | |
/ \ / \ / \ _ | | / \ | | | | / \ | |
| | | | | | / \ | | | | | | | | | | | |
| | | | | | | | / \ | | / \ / \ | | / \
| | | | | | | | | | | | | | | | | | | |
/ \/ \/ \ | | | | / \ | | | | / \ | |
| || || |/ \ | | | | | | | | | | | |
| || || || |/ \ | |/ \/ \| |/ \
|_______||_________||___________||___||_________| |_____||___________||_____________||_____________||_________|Input = a.a.a.x.x.x.a.a.a
_ _ _
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
| | | | | |
| | | | | |
| | | | | |
/ \ / \ / \
_ _ _ | | | | | | _ _ _
/ \ / \ / \ | | | | | | / \ / \ / \
|_|/\/\|_|/\/\|_|/\/\|_______________|/\/\|_______________|/\/\|_______________|/\/\|_|/\/\|_|/\/\|_|这是我第一次发到PPCG,所以请对我轻松一点。已经穿过沙箱了。任何负面意见或可能的改进,请张贴作为评论,我会尽我所能
发布于 2016-09-20 14:48:05
c?l=c++l++c
c%s=("|"?(drop 2(r s)>>c)):s
g 46=["/\\"?""]
g 32=[" "]
g x="_"%h(mod x 32)
h 1=["/ \\"," _ "]
h x=(" "%h(x-1))!x
v!x|mod x 3/=1=v|z<-'/':r v++"\\"=z:map(" "?)v
r v=v!!0>>" "
f t|l<-map(g.fromEnum)t,m<-maximum(map length l)-1=unlines[l>>= \x->(x++cycle[r x])!!i|i<-[m,m-1..0]]发布于 2016-09-20 19:42:38
->s{a=['']*36
w=' '
s.chars{|c|a[u=0]+=c<?!?w*2:c<?/?"/\\"*2:(h=c.upcase.ord-64
1.upto(1+h+=(h-1)/3){|t|u=[u,l=1+2*((f=h-t)/4)].max
a[t]+=w*(a[0].size-a[t].size)+(f<-1?w:f<0??_:(f%4<1?[?/,?\\]:[?|]*2)*(w*l)).center(u+2)}
"|#{?_*u}|")}
a.reverse}你想多多新行就允许多少,所以我冒昧地说。除此之外,该进程如下:
a。a[0]中/\/\添加到a[0]c.upcase.ord + (c.upcase.ord-1)/3)a:中的每一行a[t]+=w*(a[0].size-a[t].size)h以上的一个,则以_为中心| |或/ \的适当宽度(1+2*((h-t)/4),取决于if h-t%4==0"|___|"添加到a[0]中a.reverse我敢打赌,如果我计算出避免reverse的数学,它一定会变小。
https://codegolf.stackexchange.com/questions/93743
复制相似问题