编写一个接受任何可打印ASCII字符的非空字符串的程序(或函数)。
打印(或返回)字符串中字符的曲折链,每一对相邻的字符链接如下:
/
。例如B/A\
。例如B\A-
。例如A-A所以Programming Puzzles & Code Golf
的输出应该是
o
/ \
r z-z o e G l
/ \ / \ / \ / \ / \
P o r m-m n u l s & C d f
\ / \ / \ / \ / \ / \ / \ /
g a i g P e
\ /
如果输入字符串中只有一个字符,则输出就是该字符。
您的程序应该像对待所有其他字符一样对待、/
、\
和-
。
例如,-\//-- \ //-
应产生:
\
/ \
- /-/
/ \
- --- \ /-/
\ / \ / \
-
\
除了一个可选的尾换行符外,输出中不应该有多余的换行符。(请注意,上面示例中的空行保存了字符串中的最后一个空格,因此并不是无关的。)在任何安排的任何线上,可能有尾随空间。
还有一个例子--输入:
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
输出:
9 9 8 6 6
/ \ / \ / \ / \ / \
9 6 8 7 3 3 4 2 4 8 9 8-8
/ \ / \ / \ / \ / \ / \ / \
4 5 2 5 5 2 3-3 3 7 5 2 4 9 9 9-9 7
/ \ / \ / \ / \ / \ / \ / \ / \ / \
3 1 1 3 2 0 1 7 6 3 3 5 8 8 6
\ / \ / \ / \ / \ / \
. 1 1 5 2 9 9 3 7 1 4 6 8 9
\ / \ / \ / \ / \ / \ / \ / \ /
0 0 7 9 5 2 0 0 2 6 9-9 8 5 4 7
\ / \ / \ / \ / \ / \ / \ /
4 4-4 2 8 8 4 2 3 2 7 6
\ / \ / \ / \ /
0 6 8 3 1-1 0
\ / \ /
2 0
发布于 2015-08-29 04:40:30
aY,JhzZVtzaY,@"-\/"K-<NJ>N~JN=+ZKaY,N=+ZK;jbCmX*\ h-e=GSeMYhG-edhGhdY
游行示威。更长的输入仍然有效,但是在固定宽度的输出框中它们看起来并不好。
我首先用Y
构造一个性格,高度元组的列表。它是[['P', 0], ['/', -1], ['r', -2], ['\\', -1], ['o', 0], ['\\', 1], ['g', 2]]
在Programming Puzzles & Code Golf
示例的早期。
然后,我创建适当长度的空格字符串,在适当的位置插入字符,转置,在换行符上联接并打印。
发布于 2015-08-29 14:17:22
def z(n,h=[]):
for j in range(len(n)):h.append(sum(cmp(ord(n[i]),ord(n[i+1]))for i in range(j)))
h=[j-min(h)for j in h]
for y in range(max(h)*2+2):
s=""
for x in range(len(n)):
if h[x]*2==y:s+=n[x]
else:s+=" "
if x==len(n)-1:continue
c=" "
if h[x]<h[x+1]and h[x]*2==y-1:c="\\"
if h[x]>h[x+1]and h[x]*2==y+1:c="/"
if h[x]==h[x+1]and h[x]*2==y:c="-"
s+=c
print s
运行as:z("Zigzag")
发布于 2015-09-04 12:39:24
使用模板字符串。缩进空格和换行符不被计算,除了后面的最后一条换行符是重要的和计数的。
通常注意:测试在任何符合EcmaScript 6的浏览器上运行代码段(特别是Chrome,而不是MSIE )。我在Firefox上测试过,Safari 9可以去)
f=z=>
[...z].map(c=>
(d=0,x=w+c,p&&(
c<p?o[d=1,g='\\ ',r+=2]||o.push(v,v)
:c>p?(d=-1,g='/ ',r?r-=2:o=[v,v,...o]):x='-'+c,
o=o.map((o,i)=>o+(i-r?i-r+d?b:g:x),v+=b)
),p=c)
,v=w=' ',o=[z[p=r=0]],b=w+w)&&o.join`
`
Ungolfed=z=>
(
v=' ',o=[z[0]],r=0,p='',
[...z].map(c=>{
if (p) {
if (c < p) {
if (! o[r+=2])
o.push(v,v)
o = o.map((o,i)=>o+(i==r ? ' '+c : i==r-1 ? '\\ ' : ' '))
} else if (c > p) {
if (r == 0)
o = [v,v,...o]
else
r -= 2
o = o.map((o,i)=>o+(i==r ? ' '+c : i==r+1 ? '/ ' : ' '))
} else {
o = o.map((o,i)=>o+(i==r ? '-'+c : ' '))
}
v += ' '
}
p = c
}),
o.join`\n`
)
out=x=>O.innerHTML+=x+'\n'
test = [
"Programming Puzzles & Code Golf",
"-\\//-- \\ //- ",
"3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679"]
test.forEach(t=>out(t+"\n"+f(t)))
<pre id=O></pre>
https://codegolf.stackexchange.com/questions/55593
复制相似问题