Desafio Tomado com permissão do meu Concurso de Desafio de Código da Universidade
Depois de terminar seus estudos há alguns meses, Marie abriu uma conta bancária para começar a receber o pagamento de seu primeiro emprego na cidade. Desde então, ela vem realizando algumas transações com ele. Seu primeiro pagamento foi de US $ 1000. Com esse dinheiro, ela pagou por um jantar no qual convidou seus pais (o jantar custou US $ 150 dólares); depois, fez uma compra em um supermercado conhecido (US $ 80 dólares) e uma reserva de hotel para suas férias (US $ 200). No final do mês, ela recebeu seu pagamento novamente (1040 dólares, um pouco mais que o mês anterior) e no dia seguinte ela gastou outros 70 dólares no supermercado.
Hoje, ela percebeu que se depois de pagar os primeiros US $ 80 no supermercado uma segunda conta tivesse sido criada e a primeira congelada, as duas contas teriam exatamente o mesmo saldo:
O evento foi tão raro para ela que ela deseja continuar verificando se os movimentos de sua conta e os de seus amigos também têm esse recurso ou não.
Desafio
Dada uma lista de transações, produza o número de instantes de tempo em que o proprietário da conta bancária poderia ter criado uma segunda conta para que ambos tivessem o mesmo saldo final.
Exemplo: [1000, -150, -80, -200, 1040, -70]
Caso de teste
- Entrada:
1000 -150 -80 -200 1040 -70
Saída:1
- Entrada:
100 -100
Saída:2
- Entrada:
1 2 3
Saída:1
- Entrada:
10 -20 15
Saída:0
- Entrada:
15 -15 15 -15
Saída:3
- Entrada:
1
Saída:0
Notas
- Você pode assumir que não haverá transações de US $ 0
- Você pode receber sugestões de qualquer maneira razoável
Respostas:
C # (compilador interativo do Visual C #) , 63 bytes
Guardado 6 bytes graças a dana
Experimente online!
fonte
Perl 6 , 25 bytes
Experimente online!
Explicação
Apenas adicionamos um zero à lista fornecida (
0,|$_
), fazemos uma sequência de somas parciais com[\+]
(ou seja, a sequência formada pelo primeiro elemento, a soma dos dois primeiros, a soma dos três primeiros etc.) e procuramos (grep
) por qualquer elementos exatamente iguais à metade do estado final da conta (soma da lista fornecida). Finalmente, contamos com um+
.fonte
05AB1E , 11 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Geléia ,
116 bytesExperimente online!
fonte
JavaScript (Node.js) , 45 bytes
Experimente online!
Salve 4 bytes usando
-~o[s]
. Graças a Shaggy.fonte
+
é alterado para!
, para que possa funcionar como entrada[100]
.Perl 5
-p
,4241 bytes@NahuelFouilleul salva um byte
Experimente online!
fonte
y/ /+/;
salva 1 byteJavaScript (ES6), 52 bytes
Experimente online!
Comentado
Versão recursiva,
5453 bytesExperimente online!
fonte
APL (Dyalog Unicode) , SBCS de 21 bytes
Função de prefixo tácito anônimo
Experimente online!
⍳
Ɩ ndices da contagem de transações∘
≢
0,
preceder zero⊂(
…)¨⍨
Aplique a seguinte função tácita com cada um deles como argumento à esquerda e a lista inteira de transações como argumento à direita (⍨
argumento de troca⊂
a lista inteira de transações(
…)
como argumento da esquerda para a função abaixo¨
aplicada a cada um dos índices⍨
com argumentos trocados (ou seja, lista à direita, índices à esquerda:↓
largar muitos da esquerda1⊥
soma (lit. avaliar na base-1)(
…)=
É (0/1) igual a…↑
tome que muitas transações da esquerda+/
somar eles+/
somar essa lista booleana para obter a contagem de verdadesfonte
Lote, 84 bytes
Recebe entrada como argumentos da linha de comando. Explicação:
Junte os argumentos com espaços.
Substitua os espaços por se
+
avalie o resultado. Limpe também a contagem.Para cada quantia, subtraia o dobro da soma. Se o resultado for zero, essa é uma correspondência válida, então aumente a contagem. O zero extra no início permite uma correspondência antes de qualquer valor.
Imprima o resultado.
fonte
Carvão , 15 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Infelizmente no carvão
Sum([])
não é0
assim que eu tenho que garantir que sempre haja pelo menos um elemento a ser somado.fonte
Python 3 ,
6758 bytesExperimente online!
-9 bytes graças a @ Não seja um ponto x triplo
fonte
lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1))
.sum(l[:x])*2==sum(l)
economiza mais 2 bytes.R ,
50bytes 37Experimente online!
fonte
MATL , 9 bytes
Experimente online!
A mesma abordagem de algumas outras respostas: adicione um zero e verifique com que frequência a metade da soma acumulada é igual à soma total.
fonte
Japonês
-x
,1411 bytesTente
fonte
PowerShell ,
8882 bytes-6 Bytes graças a mazzy
Experimente online!
Parece um método muito desajeitado, mas conseguiu o trabalho. Vou tentar reformá-lo no futuro.
fonte
$i+=<predicate>
vez dissoif(<predicate>){$i++}
PowerShell ,
494536 bytesExperimente online!
fonte
Brachylog , 9 bytes
Não é tão bom quanto o dia 1. Este perde para Jelly
Explicação
Conjunto de testes: Experimente online!
fonte
bash, 52 bytes
TIO
O truque: setting
IFS=+
,"$*"
expande para uma string onde os argumentos são delimitados por+
, na expressão aritmética eval à somafonte
Haskell,
4635 bytesExperimente online!
fonte
J , 19 bytes
Experimente online!
explicação
fonte