首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Zigzagify字符串

Zigzagify字符串
EN

Code Golf用户
提问于 2015-08-29 03:33:14
回答 4查看 1.6K关注 0票数 45

编写一个接受任何可打印ASCII字符的非空字符串的程序(或函数)。

打印(或返回)字符串中字符的曲折链,每一对相邻的字符链接如下:

  • 如果第一个字符发生在第二个字符之前,则为/。例如B/A
  • 如果第一个字符发生在第二个字符之后,则为\。例如B\A
  • 如果第一个字符和第二个字符相同,则为-。例如A-A

所以Programming Puzzles & Code Golf的输出应该是

代码语言:javascript
运行
复制
                                                        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                          
                     \ /                                     

如果输入字符串中只有一个字符,则输出就是该字符。

您的程序应该像对待所有其他字符一样对待、/\-

例如,-\//-- \ //-应产生:

代码语言:javascript
运行
复制
      \                      
     / \                     
    -   /-/                  
   /       \                 
 -          ---   \   /-/    
               \ / \ /   \   
                          -  
                           \ 

除了一个可选的尾换行符外,输出中不应该有多余的换行符。(请注意,上面示例中的空行保存了字符串中的最后一个空格,因此并不是无关的。)在任何安排的任何线上,可能有尾随空间。

以字节为单位的最短代码获胜.

还有一个例子--输入:

代码语言:javascript
运行
复制
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679

输出:

代码语言:javascript
运行
复制
                          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                              
EN

回答 4

Code Golf用户

回答已采纳

发布于 2015-08-29 04:40:30

Pyth,69字节

代码语言:javascript
运行
复制
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示例的早期。

然后,我创建适当长度的空格字符串,在适当的位置插入字符,转置,在换行符上联接并打印。

票数 8
EN

Code Golf用户

发布于 2015-08-29 14:17:22

Python,393字节

代码语言:javascript
运行
复制
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")

票数 3
EN

Code Golf用户

发布于 2015-09-04 12:39:24

JavaScript (ES6),202号

使用模板字符串。缩进空格和换行符不被计算,除了后面的最后一条换行符是重要的和计数的。

通常注意:测试在任何符合EcmaScript 6的浏览器上运行代码段(特别是Chrome,而不是MSIE )。我在Firefox上测试过,Safari 9可以去)

代码语言:javascript
运行
复制
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)))
代码语言:javascript
运行
复制
<pre id=O></pre>
票数 3
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/55593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档