Answers:
由于未指定输入形式,因此它将取自stdin的Golfscript数组格式的字符串。
~0\{1$+.@+\}/])?
所以像
golfscript.ry eqindex.gs <<<"[-7 1 5 2 -4 3 0]"
这个想法很简单:它需要一个数组A_i
并映射到数组,A_i + 2 SUM_{j<i} A_j
然后寻找等于整个数组之和的第一个索引。
对于@mellamokb的挑战,我提供:
~0\{1$+.@+\}/:S;]:A,,{A=S=},`
为29个字符。
A=input()
print[i for i in range(len(A))if sum(A[:i])==sum(A[i+1:])]or-1
接受逗号分隔的输入
runhugs FILE.hs
即可运行program FILE.hs
。
a[99],*p=a,s;main(){for(;scanf("%d",p)>0;s+=*p++
);for(;p>a;s-=*p)(s-=*--p)||printf("%d\n",p-a);}
请注意,这将以相反的顺序打印平衡指数。
用法示例:
$ ./equilibrium <<< "-7 1 5 2 -4 3 0"
6
3
a=*$<.map(&:to_i)
p (0...a.size).select{|x|a[0..x].reduce(:+)==a[x..-1].reduce(:+)}
编辑:Ventero建议的较短版本:
a=$<.map &:to_i
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
输入是每行一个数字,输出是用逗号分隔的方括号中的索引列表。
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
请注意,这是针对Ruby 1.9的,因为它使用字符文字作为字符串)
map
与符号之间必须有一个空格。而且您不需要splat运算符放在$<
任何一个的前面,因此所有代码行看起来都是这样的:a=$<.map &:to_i
。;)
P=parseInt;L=prompt().split(',');S=function(A)A.reduce(function(a,b)P(a)+P(b),0);R=[i for(i in L)if(S(L.slice(0,i))==S(L.slice(P(i)+1)))];alert(R.length>0?R:-1);
隐含符号的单子动词,返回平衡索引的向量。插入的空格仅供参考。
[: I. +/\. = +/\
为了解释这一点,首先要观察它的明确定义。y
是形式参数:
3 : 'I. (+/\. y) = (+/\ y)'
+
添加其参数。/
是一个副词,它在它的right参数的成员之间插入其左侧的动词,例如+/ 1 2 3 4
与相同1 + 2 + 3 + 4
。\
是一个副词,将其左侧的动词应用于其右侧参数的所有前缀。例如,通过<
在其参数周围绘制一个框,可以<\ 1 2 3 4
产生
┌─┬───┬─────┬───────┐
│1│1 2│1 2 3│1 2 3 4│
└─┴───┴─────┴───────┘
因此,+/\
为其右参数的每个前缀计算总和。
\.
就像,\
但是使用后缀而不是前缀。因此,+/\.
计算后缀和的向量。=
对参数进行逐项比较。例如,1 1 3 3 = 1 2 3 4
yields 1 0 1 0
。(+/\. y) = (+/\ y)
对于后缀总和等于前缀总和或创建平衡的所有索引,均得出一个。I.
一的向量,返回索引包含该向量的向量。i=map(lambda x:int(x),raw_input().split(" "));x=0
print map(lambda x:(sum(i[0:x])==sum(i[x+1::])),range(0,len(i)))
i=input()
print map(lambda x:sum(i[0:x])==sum(i[x+1::]),range(0,len(i)))
打印给定索引是否为平衡索引,不显示数组平衡处的整数指标。
for($i=count($a)-1,$c=0;$i+1&&$c!=(array_sum($a)-$a[$i])/2;$c+=$a[$i--]);echo $i;
由于未指定任何输入,因此需要使用数组作为变量来初始化$a
。