O índice de equilíbrio de uma sequência é um índice tal que a soma dos elementos nos índices mais baixos é igual à soma dos elementos nos índices mais altos. Por exemplo, em uma sequência A:
A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0
3 é um índice de equilíbrio, porque:
A[0]+A[1]+A[2]=A[4]+A[5]+A[6]
6 também é um índice de equilíbrio, porque:
A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0
(a soma de zero elementos é zero) 7 não é um índice de equilíbrio, porque não é um índice válido da sequência A.
A idéia é criar um programa que, dada uma sequência (matriz), retorne seu índice de equilíbrio (qualquer) ou -1 se não houver índices de equilíbrio.
Python - 72 caracteres
Recebe entrada separada por vírgula
fonte
runhugs FILE.hs
para executar o programaFILE.hs
.Haskell (
9583)Lê uma lista no estilo Haskell de stdin, por exemplo.
e retorna uma lista de índices do estilo Haskell, por exemplo.
O resultado é
[]
, se não houver índice.Por favor, diga-me, se a sua especificação quiser um comportamento diferente.
Editar% s:
fonte
C - 96
Observe que isso imprime os índices de equilíbrio na ordem inversa.
Uso da amostra:
fonte
Ruby (
83(77)Edit: Versão mais curta, conforme sugerido por Ventero:
A entrada é um número por linha, a saída é uma lista de índices separados por vírgula entre colchetes.
fonte
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
(observe que isso é para Ruby 1.9, pois usa literais de caracteres como seqüências de caracteres)map
e comercial. E você não precisa do operador splat em frente à$<
qualquer um, para que todos em toda a linha ficaria assim:a=$<.map &:to_i
. ;)JavaScript (161)
http://jsfiddle.net/6qYQv/1/
fonte
scala, 108
fonte
J (12 caracteres)
Um verbo monádico em notação tácita que retorna um vetor de índices de equilíbrio. Espaços inseridos apenas para legibilidade.
Para explicar isso, primeiro observe sua definição explícita;
y
é o parâmetro formal:+
adiciona seus argumentos./
é um advérbio que insere o verbo deixado entre os membros de seu argumento correto, por exemplo,+/ 1 2 3 4
é o mesmo que1 + 2 + 3 + 4
.\
é um advérbio que aplica o verbo à sua esquerda em todos os prefixos do seu argumento à direita. Por exemplo, ao<
desenhar uma caixa em torno de seu argumento,<\ 1 2 3 4
produzAssim,
+/\
calcula para cada prefixo do argumento correto a soma.\.
é como,\
mas opera em sufixos em vez de prefixos. Assim,+/\.
calcula um vetor de somas de sufixos.=
realiza uma comparação item a item de seus argumentos. Por exemplo,1 1 3 3 = 1 2 3 4
produz1 0 1 0
.(+/\. y) = (+/\ y)
gera um para todos os índices nos quais a soma do sufixo é igual à soma do prefixo ou um equilíbrio é criado.I.
retorna um vetor dos índices nos quais o vetor contém um.fonte
Python 2, 70
A idéia é rastrear a soma em execução
s
e verificar se é metade da soma da matriz sem o elemento atual e, portanto, igual à soma da matriz após o elemento atual. Nesse caso, atualizamos o índice de equilíbrio para o índice atual. O último índice de equilíbrio é impresso ou o valor inicial,-1
se não houver nenhum.Na verdade, armazenamos o complemento de bit do índice de equilíbrio para inicializá-lo como 0.
fonte
Python - 114
Python - 72
Imprime se o índice fornecido é ou não um índice de equilíbrio, não imprime as indecisões inteiras nas quais a matriz está equilibrada.
fonte
PHP, 134 caracteres
Eu tenho uma coceira de que isso está longe de ser o golfe ideal para o PHP, mas acabou o vapor (cérebro). Pelo menos é mais curto do que com array_sum e array_splice :-)
fonte
PHP (81)
for($i=count($a)-1,$c=0;$i+1&&$c!=(array_sum($a)-$a[$i])/2;$c+=$a[$i--]);echo $i;
http://3v4l.org/qJvhO
Como nenhuma entrada foi especificada, ela precisa ser inicializada com a matriz como a variável
$a
.fonte