¡Lo creas o no, los Sex Bob-ombs se han convertido en una banda mundialmente famosa y actualmente están de gira mundial! Como contable , debe supervisar sus finanzas diarias y proporcionar informes periódicos.
Cada pocas semanas compila una lista de sus gastos (en USD completos ) en el orden en que se incurrieron.
Por ejemplo, la lista
378
-95
2234
significa que se depositaron $ 378 en su cuenta, y luego se retiraron $ 95, y luego se depositaron $ 2234.
Usted quiere asegurarse de que la suma acumulada de estos valores nunca pasa por debajo de un valor umbral T . Decide escribir un programa para hacer esto por usted.
Desafío
Escriba un programa o función que tome un solo entero T y una lista de enteros. Si la suma de la lista de enteros es menor que T , imprima o devuelva un valor falso , de lo contrario imprima o devuelva un valor verdadero.
Puede usar cualquier método de entrada habitual (stdin, desde archivo, línea de comando, argumentos para funcionar).
- Al comienzo de la lista, la suma acumulada es 0. Entonces, una T positiva significa que el resultado siempre es falso.
+
nunca estará frente a enteros positivos.- La lista puede contener 0.
- La lista puede estar vacía.
Casos de prueba
T es -5 en todos estos.
Falsy
-6
1
2
3
-20
200
-300
1000
Verdad:
[empty list]
-5
4
-3
-6
Puntuación
El envío con la menor cantidad de bytes gana. Tiebreaker va a la primera publicación publicada.
fuente
Respuestas:
gs2 - 6 bytes
Suponga que la lista está en la parte superior de la pila y el umbral está en el registro A. En mnemónicos:
En bytecode:
fuente
inits
es como en Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
nos da todos los prefijos. Luego filtramos con una "lambda" de tres comandos, que está__ __ __ F2
en bytecode: buscamos todos los prefijos de los cuales la suma es menor que lo que sea que hayaA
. Luegonot
determina si la lista está vacía.Haskell, 22 bytes
Uso:
f (-5) [4,-3,-6]
que salidasTrue
.Haga una lista de subtotales y verifique si todos los elementos son> = t.
Editar: corrección de errores para la lista vacía y
t
s positivofuente
0
no está en la lista, ya quescanl1
devuelve la lista vacía si se alimenta con la lista vacía, peroall
detecta ese caso.f (-5) []
vuelveTrue
.Pitón 2, 41
El primer argumento es la matriz; el segundo es el total mínimo acumulado.
fuente
J, 11 bytes
Pruebas
Mejora de 1 byte gracias a FUZxxl .
Explicación de la versión original.
(*/@(<:0,+/\))
+/\
crea una suma continua (suma+/
de prefijos\
)0,+/\
agrega un 0 a la suma acumulada(<:0,+/\)
entrada del lado izquierdo menor o igual<:
que (elementos de) resultado de0,+/\
la entrada del lado derecho@
con el resultado anterior*/
producto de todos los elementos (1 si todos los elementos son 1, 0 si un elemento es 0)fuente
*/@:<:0,+/\
por un personaje, creo.APL,
810Esta es una función que toma
T
como argumento izquierdo y la lista como argumento derecho.0,+\
: suma de ejecución del argumento correcto, agregado a un 0∧.≤
: argumento izquierdo menor o igual (≤) que todos los elementos (∧) en el argumento derechofuente
Mathematica, 34 bytes
Esto define una función variable sin nombre que toma
T
como primer parámetro y las transacciones como los parámetros restantes, y devuelve un valor booleano:Me gusta esto porque podría hacer uso de lo bastante raro
##2
que "salpica" todos los argumentos del segundo en la lista. Para más detalles vea la última sección en este consejo de golf .fuente
k, 8 caracteres
Un verbo diádico que toma el umbral como primer argumento y la lista como el segundo. Sorprendentemente, esto funciona en todas las versiones de k, incluida la fuente abierta Kona.
En k, la composición de funciones solo se realiza escribiendo una y luego la otra, por lo que podemos dividir esto por funciones. De derecha a izquierda:
-\,
toma sumas sucesivas y las resta del umbral. (Sif
es diádico, entonces sef\ (a; b; c; ...)
expande a(a; a f b; (a f b) f c; ...)
.,
Solo une listas juntas). La ruptura ocurre incluso cuando algo es igual a 0, y el sobregiro da valores estrictamente positivos.~0<
no es 0 menor que. k realmente no tiene un<=
operador mayor que o igual a , por lo que tenemos que arrojar un valor booleano NOT en un valor menor que, pero esto comprueba si el resultado no es positivo. Se aplica automáticamente a cada átomo en la lista.&/
es el pliegue de AND lógico sobre una lista. (Paraf
diádico) Entonces esto prueba si cada booleano en la lista es Verdadero.Ejemplos:
fuente
~|/>+\,
>
es "descendente tipo de permutación" por lo que~|/>+\,
da cierto sólo cuando la lista de entrada está vacía ...CJam, 17 bytes
Toma la entrada como un entero y una matriz de estilo CJam en STDIN:
Pruébalo aquí.
fuente
Pyth,
1615Pruébelo en línea con la entrada
Explicación:
Y nuevamente la estúpida
s
función desperdicia dos bytes. Creo que reportaré esto como un error al repositorio de Pyth.editar: 13 (no válido)
Gracias a isaacg por guardar un byte (
>1
a!
) y por cambiar la implementación des
en el repositorio de Pyth. Ahora es posible el siguiente código (pero, por supuesto, no es válido para este desafío).fuente
!
lugar de>1
.#sY
. Y gracias por guardar 1 byte.R, 35
Pruébalo aquí
fuente
Julia, 33 bytes
Esto crea una función sin nombre que acepta dos parámetros,
T
yl
, y devuelve un valor lógico.La
all()
función hace todo el trabajo pesado aquí. Se necesitan dos argumentos: un predicado y un iterable. Para el predicado, le decimos quei
representa el valor actual del iterable usando una función sin nombre, especificada pori->
. Luego, en cada iteración, lo comparamosi
con elT
usoi>=T
.Para asegurarnos de que Julia no se asuste por usarla
cumsum()
en una lista vacía, podemos agregar un cero allí usando[0, l]
.fuente
Preludio ,
144136 bytesEsto fue ... difícil ...
Creo que 6 voces es un nuevo récord para mí, aunque estoy seguro de que hay una manera de reducir eso y eliminar muchos de esos molestos espacios en blanco. Verificar el signo de un valor (y, por lo tanto, verificar si un valor es mayor que otro) es bastante complicado en Prelude.
La entrada y la salida se dan como valores de byte.Cuando usa el intérprete de Python , puede configurarlo
NUMERIC_OUTPUT = True
, de modo que realmente obtenga un ASCII0
o1
. Para la entrada numérica, tendría que agregar otroNUMERIC_INPUT
indicador (probablemente debería publicar mi intérprete ajustado en algún momento).También tenga en cuenta que Prelude realmente no puede distinguir el final de una lista de
0
dentro de la lista. Entonces, para permitir cero transacciones, estoy leyendoT
, luego la longitudL
de la lista y luego lasL
transacciones.fuente
CJam, 18 bytes
Otro enfoque en los mismos bytes que el otro.
Toma entrada a través de STDIN en forma de
<threshold> <array of transactions>
Pruébalo en línea aquí
fuente
f>:|!
lugar de:)f<:&
JavaScript (ES6) 38
33Editar error de saldo inicial fijo. Thx @martin y @rainbolt
Prueba en la consola Firefox / FireBug
fuente
Python 2.7 - 55 bytes
Llama como
print f(-5,[1,2,3,-20])
. Pruébalo aquí .Gracias a Jakube por ayudar.
fuente
> <>, 29 + 3 = 32 bytes
Corre como
donde el umbral es el primer número.
fuente
Octava, 27
fuente
Perl 6 (21 bytes)
Es una función que toma un argumento inicial y una lista de elementos. Funciona comprobando si ninguno ( mediante uniones ) de elementos está por debajo del umbral.
[\+]
se utiliza para generar suma continua, por ejemplo,[\+] 1, 2, 3
da1, 3, 6
.0,
para anexar0
al comienzo de la lista es necesario debido al requisito de que el umbral positivo siempre debe fallar.Más o menos lo mismo que la solución de Haskell, solo en la sintaxis de Perl 6 (Perl 6 tomó muchas características de programación ordenadas de Haskell).
fuente
Perl - 20
Tome la lista de números
STDIN
separados por nuevas líneas y tomeT
con la-i
bandera.+2 para
-i
y-n
banderas. El valor de salida es255
para fallas y0
en caso de éxito.Corre con:
fuente
Clojure, 45
P.ej
O un poco más agradable;
fuente
Java 8 - 153 caracteres
Función de golf:
Sin golf:
Programa del conductor:
}
Salida:
fuente