Para verificar se uma lista de números inteiros não negativos é balanceada , pode-se imaginar colocando os respectivos pesos em uma placa e, em seguida, tente equilibrar a placa em um pivô de modo que os pesos relativos resumidos à esquerda e à direita do pivô sejam os mesmos. O peso relativo é dado multiplicando o peso pela sua distância do pivô (consulte a lei da alavanca ).
(Fonte: wikipedia )
Esta imagem corresponde a uma lista [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
. Essa lista é equilibrada porque 5
tem uma distância de 20 em relação ao pivô, a 100
distância de 1 e 5*20 = 100 = 100*1
.
Exemplos
3 1 5 7
#########
^
Neste caso, o pivô está diretamente sob a 5
, a 3
distância 2 tem eo 1
e 7
tem distância 1. Assim, ambos os lados esquerdo e direito da soma pivô até 7
( 3*2 + 1*1
à esquerda e 7*1
à direita) e, portanto, a lista [3, 1, 5, 7]
é equilibrado.
Observe, no entanto, que o pivô não precisa ser colocado em um dos elementos da lista, mas também pode ser colocado entre dois elementos da lista:
6 3 1
#######
^
Nesse caso, as distâncias se tornam 0.5, 1.5, 2.5, ...
e assim por diante. Esta lista também é equilibrada porque 6*0.5 = 3 = 3*0.5 + 1*1.5
.
O pivô só pode ser colocado exatamente abaixo de um número ou exatamente no meio entre dois números, e não, por exemplo, em dois terços entre dois números.
Tarefa
Dada uma lista de números inteiros não negativos em qualquer formato razoável, insira um truthy
valor se a lista puder ser equilibrada e um falsy
valor caso contrário.
Você pode supor que a lista de entrada contenha pelo menos dois elementos e que pelo menos um elemento seja diferente de zero.
Esse é um desafio do código-golfe , portanto, a resposta com a menor quantidade de bytes em cada idioma vence.
Truthy Testcases
[1, 0]
[3, 1, 5, 7]
[6, 3, 1]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
[10, 4, 3, 0, 2, 0, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 7, 7, 7]
Falsy Testcases
[1, 2]
[3, 6, 5, 1, 12]
[0, 0, 2, 0, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[6, 3, 2, 4, 0, 1, 2, 3]
[4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
Muitos desafios relacionados foram encontrados enquanto o desafio estava na caixa de areia : é um número equilibrado? , Índice de equilíbrio de uma sequência , Equilibrar um conjunto de pesos em uma gangorra , Balanceamento de palavras , vou inclinar? e Onde pertence o pivô?
You can assume that the input list contains at least two elements and that at least one element is non-zero.
Respostas:
Pitão,
1210 bytesExperimente online
Economizou 2 bytes graças ao Sr. Xcoder e Erik, o Outgolfer.
Explicação
fonte
y
no lugar de*2
!%ys*VQUQs
Wolfram Language (Mathematica) , 36 bytes
Este é um problema do centro de massa em um sistema de coordenadas com a origem em um dos pontos e, em seguida, você determina se o CM cai em um ponto de rede onde a largura da rede é = 1/2.
Experimente online!
fonte
05AB1E , 6 bytes
Experimente online!
Quão?
fonte
[1,1]
(deve ser verdade). Parece que a duplicação implícita não está realmente lá.Gelatina , 6 bytes
Experimente online!
Bem, parece que a Freira Furada apontou o sentido inútil.
Usando a abordagem Pyth de Mnemonic.
Retorna um número inteiro positivo (verdade) ou zero (falsidade).
fonte
LḶ
vez (embora iria ter sucesso para todos os casos de teste). EDIT: Oooh, agora que penso sobre isso de novo, parece tão ... ( b | a ⇔ b | a + b duh)R , 34 bytes
Experimente online!
Recebe entrada como um vetor. Portos resposta mnemônica . Retorna uma
1x1
matriz.fonte
Japonês , 10 bytes
Experimente online!
Explicação:
Retorna
1
por verdade,0
por falsidade.fonte
Python 2 , 41 bytes
A saída é via código de saída, então 0 é verdadeiro e 1 é falso.
Experimente online!
fonte
Julia ,
3127 bytes4 bytes salvos graças a @Dennis
Experimente online!
fonte
Ruby , 47 bytes
Economizou 2 bytes graças ao Sr. Xcoder
Experimente online!
fonte
C,
140137 bytesExperimente online!
fonte
Python 3 , 51 bytes
Experimente online!
fonte
Perl 6 , 23 bytes
Teste-o
Usa o algoritmo de várias outras entradas.
Expandido:
fonte
Japt,
11108 bytesOriginalmente inspirado na solução da Mnemonic
Tente
13 bytes salvos graças ao ETHproductions.Explicação
Entrada implícita da matriz
U
. Reduza pela adição (x
), multiplicando cada elemento pelo seu índice baseado em 0 (*
) no processo. Verifique se o resultado é divisível igualmente (v
) pela soma da entrada original (Ux
), com cada elemento sendo multiplicado por 0,5 (*½
).fonte
m* x*2 vUx
. Isso me faz pensar sem* x*2
pode ser reduzido ainda mais ...x*
e verificar se ele é divisível porUx*½
:)XY{X*Y}
)C # , 71 bytes
Golfe
Ungolfed
Código completo
Lançamentos
71 bytes
- Solução inicial.Notas
Eu poderia ter, ou não ter, flagrantemente "emprestado" a solução Dennis Python 2 ...
fonte
Haskell , 39 bytes
Experimente online!
fonte
APL (Dyalog) , 15 bytes
Experimente online!
Parece-me muito sem-graça ...
fonte
Python 2 ,
7875 bytesgraças ao Sr. Xcoder por -3 bytes
Experimente online!
fonte
0 in
. Também há necessidade de o0
emrange(0,len(l)*2)
..Julia 0.6 , 25 bytes
Experimente online!
fonte
PHP ,
139128 bytesExperimente online!
die
graças a manassehkatzfonte
die(1)
edie(0)
e salvar 4 bytes utilizando o código de saída em vez de uma string impressa.Rápido , 76 bytes
Experimente online!
fonte
Perl 5 , 55 + 1 (
a
) = 56 bytesExperimente online!
fonte