首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输出数字,或多或少

问输出数字,或多或少
EN

Code Golf用户
提问于 2018-03-29 15:30:22
回答 6查看 526关注 0票数 15

挑战

给定由<和>组成的输入字符串(或数组),输出整数序列(数组或字符串),以便:

  • 当按输出中的连续数字之间的顺序应用时,运算符都是正确的。
  • 所有整数都是正数(1或更大)
  • 整数的和在数学上是尽可能小的。

在您选择的语言中,输入可以不同,以匹配“大于”和“小于”。

作为替代输出,只需指定输出中数字的总和即可。在你的答案标题中说明你要解决的版本。

通常的排除和规则适用,最小的字节获胜。

您可以假设输入字符串永远不会导致语言中的整数溢出,如果这有帮助的话。

示例

  • >给出了与3相加的2 1
  • >>>给出了与10相加的4 3 2 1
  • ><给出了与5相加的2 1 2
  • 给出与1之和的1
  • >>>>>>>>>给出了与55相加的10 9 8 7 6 5 4 3 2 1
  • >><<>><>>>给出了与24相加的3 2 1 2 3 2 1 4 3 2 1
  • ><>><>><>给出了与18相加的2 1 3 2 1 3 2 1 2 1
  • <<<<>给出了与16相加的1 2 3 4 5 1
  • <<<<><<>给出了与22相加的1 2 3 4 5 1 2 3 1
  • >><<给出了与11相加的3 2 1 2 3
EN

回答 6

Code Golf用户

回答已采纳

发布于 2018-03-30 10:11:56

果冻,19字节

代码语言:javascript
复制
0;+×¥@\
=”<µCṚÇṚ»Ç‘

在网上试试!

每个数字的值为最大值( >数紧接在其右侧,<数紧接在其左侧)+1。

或者..。

在网上试试!

票数 3
EN

Code Golf用户

发布于 2018-03-29 20:05:50

哈斯克尔,119个字节

代码语言:javascript
复制
n%">"=r[1..n]
n%"<"=[1..n]
n%(c:b)|c==b!!0=(n+1)%b|a:s<-2%b,e:z<-r$n%[c]=r z++last(max:[min|c>'<'])a e:s
r=reverse
(2%)

在网上试试!

解释

这里的想法是,我们有>s或<s的运行,它们各自映射到上升和下降的范围。因此,我们使用group将字符串拆分为连续字符组。我们的工作是用适当的方式把这些缝在一起。

当我们有<>时,我们想要将两个列表缝合在一起,例如,取更大的结束值。

代码语言:javascript
复制
<<<<<<>>

分拆

代码语言:javascript
复制
<<<<<<  >>

映射到范围

代码语言:javascript
复制
[1,2,3,4,5,6,7] [3,2,1]

然后,当我们缝合时,我们放下3,因为它比较小(3并不比7大)。

代码语言:javascript
复制
 [1,2,3,4,5,6,7,2,1]

当我们有><时,我们做的正好相反,我们降低了更大的值。

实际的代码通过创建一个操作符%来实现这一点。%的定义非常复杂,但基本上它从左到右读取,记录有多少个连续字符是相同的。它在操作符的左边值中这样做。当我们到达字符变化的地方时,我们就像我描述的那样进行缝纫。

票数 5
EN

Code Golf用户

发布于 2018-03-30 11:48:01

Python3,93个字节

代码语言:javascript
复制
k=0
for r in input().split('<'):p=len(r);print(max(k,p)+1,*range(p,0,-1),end=' ');k=1+(p<1)*k

在网上试试!

解读:

代码语言:javascript
复制
# offset, will be explained later
k = 0 
for run in input().split('<'):
    # p = length of sequence of '>'s, which will produce p+1 decreasing integers
    p = len(run)
    # will print:
    # p+1 p p-1 ... 1    or    k+1 p p-1 ... 1
    print(max(k, p) + 1, *range(p, 0, -1), end=' ')
    # offset of the next sequence: (i.e. -1 + the minimal value of the first integer)
    k = 1 + (k if p > 0 else 0)
票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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