挑战
给定由<和>组成的输入字符串(或数组),输出整数序列(数组或字符串),以便:
在您选择的语言中,输入可以不同,以匹配“大于”和“小于”。
作为替代输出,只需指定输出中数字的总和即可。在你的答案标题中说明你要解决的版本。
通常的排除和规则适用,最小的字节获胜。
您可以假设输入字符串永远不会导致语言中的整数溢出,如果这有帮助的话。
>给出了与3相加的2 1>>>给出了与10相加的4 3 2 1><给出了与5相加的2 1 21之和的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发布于 2018-03-30 10:11:56
发布于 2018-03-29 20:05:50
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将字符串拆分为连续字符组。我们的工作是用适当的方式把这些缝在一起。
当我们有<>时,我们想要将两个列表缝合在一起,例如,取更大的结束值。
<<<<<<>>分拆
<<<<<< >>映射到范围
[1,2,3,4,5,6,7] [3,2,1]然后,当我们缝合时,我们放下3,因为它比较小(3并不比7大)。
[1,2,3,4,5,6,7,2,1]当我们有><时,我们做的正好相反,我们降低了更大的值。
实际的代码通过创建一个操作符%来实现这一点。%的定义非常复杂,但基本上它从左到右读取,记录有多少个连续字符是相同的。它在操作符的左边值中这样做。当我们到达字符变化的地方时,我们就像我描述的那样进行缝纫。
发布于 2018-03-30 11:48:01
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解读:
# 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)https://codegolf.stackexchange.com/questions/160643
复制相似问题