Acredite ou não, os Sex Bob-ombs se tornaram uma banda mundialmente famosa e estão atualmente em turnê mundial! Como contador, você deve supervisionar as finanças do dia a dia e fornecer relatórios regulares.
A cada poucas semanas, você compila uma lista de suas despesas (em dólares inteiros ) na ordem em que foram incorridas.
Por exemplo, a lista
378
-95
2234
significa que $ 378 foram depositados em sua conta e, depois disso, $ 95 foram retirados e, em seguida, $ 2234 foram depositados.
Você quer ter certeza de que a soma parcial destes valores nunca cai abaixo de algum valor limiar T . Você decide escrever um programa para fazer isso por você.
Desafio
Escreva um programa ou função que obtenha um único número inteiro T e uma lista de números inteiros. Se a soma da lista de números inteiros for menor que T , imprima ou retorne um valor falso , caso contrário, imprima ou retorne um valor verdadeiro.
Você pode usar qualquer método de entrada usual (stdin, do arquivo, linha de comando, argumentos para funcionar).
- No início da lista, a soma corrente é 0. Portanto, um T positivo significa que o resultado é sempre falso.
+
nunca estará na frente de números inteiros positivos.- A lista pode conter 0.
- A lista pode estar vazia.
Casos de teste
T é -5 em todos estes.
Falsy:
-6
1
2
3
-20
200
-300
1000
Verdade:
[empty list]
-5
4
-3
-6
Pontuação
O envio com o menor número de bytes vence. O desempatador vai para a primeira submissão postada.
fonte
Respostas:
gs2 - 6 bytes
Suponha que a lista esteja no topo da pilha e o limite esteja no registro A. Nos mnemônicos:
No bytecode:
fonte
inits
é como em Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
nos fornece todos os prefixos. Em seguida, filtramos com um "lambda" de três comandos, que está__ __ __ F2
no código de bytes: procuramos todos os prefixos em que a soma é menor do que o que estiverA
. Em seguida,not
determina se a lista está vazia.Haskell, 22 bytes
Uso:
f (-5) [4,-3,-6]
quais saídasTrue
.Faça uma lista de subtotais e verifique se todos os elementos são> = t.
Edit: Bugfix para lista vazia
t
es positivofonte
0
não está na lista, poisscanl1
retorna a lista vazia se alimentada com a lista vazia, masall
captura esse caso.f (-5) []
retornaTrue
.Python 2, 41
O primeiro argumento é a matriz; o segundo é o total mínimo de rodadas.
fonte
J, 11 bytes
Testes
Aprimoramento de 1 byte graças ao FUZxxl .
Explicação para a versão original
(*/@(<:0,+/\))
+/\
cria uma soma em execução (soma+/
de prefixos\
)0,+/\
anexa um 0 à soma corrente(<:0,+/\)
entrada do lado esquerdo menor ou igual<:
a (elementos do) resultado da0,+/\
entrada do lado direito@
com o resultado anterior*/
produto de todos os elementos (1 se todos os elementos forem 1, 0 se um elemento for 0)fonte
*/@:<:0,+/\
por um personagem, eu acho.APL,
810Esta é uma função que assume
T
como argumento à esquerda e a lista como argumento à direita.0,+\
: executando a soma do argumento correto, anexado a um 0∧.≤
: argumento esquerdo menor ou igual (≤) a todos os itens (∧) no argumento direitofonte
Mathematica, 34 bytes
Isso define uma função variadic sem nome que assume
T
como o primeiro parâmetro e as transações como os parâmetros restantes, e retorna um booleano:Eu gosto disso porque eu poderia usar o bastante raro
##2
que "divide" todos os argumentos do segundo para a lista. Para mais detalhes, consulte a última seção nesta dica de golfe .fonte
k, 8 caracteres
Um verbo diádico assumindo o limite como o primeiro argumento e a lista como o segundo. Notavelmente, isso funciona em todas as versões do k, incluindo o Kona de código aberto.
Em k, a composição das funções é feita apenas escrevendo uma e depois a outra, para que possamos dividir isso por funções. Da direita para esquerda:
-\,
toma somas de execução sucessivas e as subtrai do limite. (Sef
for diádico, então sef\ (a; b; c; ...)
expande para(a; a f b; (a f b) f c; ...)
.,
Apenas junta listas.) A quebra ocorre mesmo quando algo é igual a 0, e o excesso de valor fornece valores estritamente positivos.~0<
não é 0 menor que. k realmente não tem um<=
operador maior que ou igual a , então temos que jogar o booleano NOT em um menor que, mas isso testa se o resultado é não positivo. Aplica-se automaticamente a cada átomo da lista.&/
é a dobra lógica E sobre uma lista. (Paraf
diádico) Portanto, isso testa se todos os booleanos da lista são True.Exemplos:
fonte
~|/>+\,
>
é "descendente de permutação" assim~|/>+\,
dá a verdadeira somente quando a lista de entrada está vazia ...CJam, 17 bytes
Recebe a entrada como um número inteiro e uma matriz no estilo CJam em STDIN:
Teste aqui.
fonte
Pitão,
1615Experimente online com a entrada
Explicação:
E novamente o estúpido
s
função desperdiça dois bytes. Acho que vou relatar isso como um bug no repositório Pyth.editar: 13 (não válido)
Agradecemos a isaacg por salvar um byte (
>1
em!
) e por alterar a implementaçãos
no repositório Pyth. Agora, o código a seguir é possível (mas é claro que não é válido para esse desafio).fonte
!
vez de>1
.#sY
. E obrigado pela economia de 1 byte.R, 35
Experimente aqui
fonte
Julia, 33 bytes
Isso cria uma função sem nome que aceita dois parâmetros,
T
el
, e retorna um booleano.A
all()
função faz todo o trabalho pesado aqui. São necessários dois argumentos: um predicado e um iterável. Para o predicado, dizemos quei
representa o valor atual do iterável usando uma função sem nome, especificada pori->
. Em cada iteração, comparamosi
com oT
usoi>=T
.Para garantir que Julia não fique surtada com o uso
cumsum()
de uma lista vazia, podemos usar zero[0, l]
.fonte
Prelúdio ,
144136 bytesIsso foi ... difícil ...
Eu acho que 6 vozes é um novo recorde para mim, embora eu tenha certeza de que há uma maneira de reduzir isso e livrar-se de muitos espaços em branco irritantes. Verificar o sinal de um valor (e, portanto, verificar se um valor é maior que outro) é bastante complicado no Prelude.
Entrada e saída são fornecidas como valores de bytes. Quando você usa o interpretador Python , pode definir
NUMERIC_OUTPUT = True
, para obter um ASCII0
ou1
. Para entrada numérica, você teria que adicionar outroNUMERIC_INPUT
sinalizador (eu provavelmente publicaria meu intérprete ajustado em algum momento).Observe também que o Prelude não pode realmente distinguir o final de uma lista de um
0
dentro da lista. Então, para permitir zero transações, estou lendoT
, depois o comprimentoL
da lista e depois asL
transações.fonte
CJam, 18 bytes
Outra abordagem nos mesmos bytes que a outra.
Recebe entrada via STDIN na forma de
<threshold> <array of transactions>
Experimente online aqui
fonte
f>:|!
vez de:)f<:&
JavaScript (ES6) 38
33Editar Corrigido o erro de saldo inicial. Thx @martin & @rainbolt
Teste no console Firefox / FireBug
fonte
Python 2.7 - 55 bytes
Call like
print f(-5,[1,2,3,-20])
. Test it here.Thanks to Jakube for helping.
fonte
><>, 29 + 3 = 32 bytes
Run like
where the threshold is the first number.
fonte
Octave, 27
fonte
Perl 6 (21 bytes)
It's a function taking initial argument, and list of elements. It works by checking if none (by using junctions) of elements are below the threshold.
[\+]
is used for generating running sum, for example[\+] 1, 2, 3
gives1, 3, 6
.0,
to append0
at beginning of list is needed because of requirement that positive threshold always should fail.Pretty much the same thing as Haskell solution, just in Perl 6 syntax (Perl 6 took so many neat programming features from Haskell).
fonte
Perl - 20
Pegue a lista de números
STDIN
separados por novas linhas e leveT
com a-i
bandeira.+2 para
-i
e-n
sinalizadores. O valor de saída é255
para falhas e0
com êxito.Correr com:
fonte
Clojure, 45
Por exemplo
Ou um lil 'mais agradável;
fonte
Java 8-153 caracteres
Função Golfed:
Ungolfed:
Programa de driver:
}
Resultado:
fonte