Croyez-le ou non, les Sex Bob-ombs sont devenus un groupe de renommée mondiale et sont actuellement en tournée mondiale! En tant que comptable, vous devez superviser leurs finances quotidiennes et fournir des rapports réguliers.
Toutes les quelques semaines, vous compilez une liste de leurs dépenses (en USD ) dans l'ordre où elles ont été engagées.
Par exemple, la liste
378
-95
2234
signifie que 378 $ ont été déposés sur leur compte et qu'ensuite 95 $ ont été retirés, puis que 2234 $ ont été déposés.
Vous voulez vous assurer que la somme en cours d' exécution de ces valeurs va jamais au- dessous une valeur de seuil T . Vous décidez d'écrire un programme pour le faire pour vous.
Défi
Écrivez un programme ou une fonction qui prend un seul entier T et une liste d'entiers. Si la somme cumulée de la liste des nombres entiers est toujours inférieure à T , imprimez ou renvoyez une valeur fausse , sinon imprimez ou renvoyez une valeur véridique.
Vous pouvez utiliser toutes les méthodes d'entrée habituelles (stdin, à partir d'un fichier, de la ligne de commande, des arguments pour fonctionner).
- Au début de la liste, la somme cumulée est de 0. Un T positif signifie donc que le résultat est toujours faux.
+
ne sera jamais devant des nombres entiers positifs.- La liste peut contenir 0.
- La liste est peut-être vide.
Cas de test
T est -5 dans tous ces cas.
Falsy:
-6
1
2
3
-20
200
-300
1000
Vérité:
[empty list]
-5
4
-3
-6
Notation
La soumission avec le moins d'octets est gagnante. Tiebreaker passe à la première soumission publiée.
la source
Réponses:
gs2 - 6 octets
Supposons que la liste se trouve en haut de la pile et que le seuil se trouve dans le registre A. En mnémoniques:
En bytecode:
la source
inits
est comme dans Haskell:"abcd" inits
→["" "a" "ab" "abc" "abcd"]
nous obtient tous les préfixes. Ensuite, nous filtrons avec un "lambda" de trois commandes, qui est__ __ __ F2
en bytecode: nous recherchons tous les préfixes dont la somme est inférieure à ce qui est dedansA
.not
Détermine ensuite si la liste est vide.Haskell, 22 octets
Utilisation:
f (-5) [4,-3,-6]
quelles sortiesTrue
.Faites une liste de sous-totaux et vérifiez si tous les éléments sont> = t.
Edit: Bugfix pour la liste vide et
t
s positifsla source
0
n'est pas dans la liste, carscanl1
renvoie la liste vide si elle est alimentée avec la liste vide, maisall
intercepte ce cas.f (-5) []
retourneTrue
.Python 2, 41
Le premier argument est le tableau; le second est le total cumulé minimum.
la source
J, 11 octets
Les tests
Amélioration d'un octet grâce à FUZxxl .
Explication pour la version originale
(*/@(<:0,+/\))
+/\
crée une somme cumulée (somme+/
des préfixes\
)0,+/\
ajoute un 0 à la somme cumulée(<:0,+/\)
entrée côté gauche plus petite ou égale<:
à (éléments de) résultat de0,+/\
l'entrée côté droit@
avec le résultat précédent*/
produit de tous les éléments (1 si tous les éléments sont 1, 0 si un élément est 0)la source
*/@:<:0,+/\
pour un personnage, je pense.APL,
810Il s'agit d'une fonction qui prend
T
comme argument de gauche et la liste comme argument de droite.0,+\
: somme cumulée de l'argument de droite, ajoutée à un 0∧.≤
: argument de gauche plus petit ou égal (≤) à tous les éléments (∧) de l'argument de droitela source
Mathematica, 34 octets
Ceci définit une fonction variadic sans nom qui prend
T
comme premier paramètre et les transactions comme paramètres restants, et retourne un booléen:J'aime ça parce que je pourrais utiliser le plutôt rare
##2
qui "répartit" tous les arguments du second dans la liste. Pour plus de détails, voir la dernière section de cette astuce golf .la source
k, 8 caractères
Un verbe dyadique prenant le seuil comme premier argument et la liste comme deuxième. Remarquablement, cela fonctionne dans toutes les versions de k, y compris le Kona open-source.
En k, la composition des fonctions se fait simplement en écrivant l'une puis l'autre, nous pouvons donc la décomposer par fonctions. De droite à gauche:
-\,
prend des sommes courantes successives et les soustrait du seuil. (Sif
est dyadique, puis sef\ (a; b; c; ...)
développe en(a; a f b; (a f b) f c; ...)
.,
Joint simplement les listes.) La rupture se produit même lorsque quelque chose est égal à 0, et le surdénombrement donne des valeurs strictement positives.~0<
n'est pas inférieur à 0. k n'a pas vraiment d'<=
opérateur supérieur ou égal à , nous devons donc lancer booléen NOT sur un nombre inférieur à, mais cela vérifie si le résultat est non positif. Il s'applique automatiquement à chaque atome de la liste.&/
est le pli de ET logique sur une liste. (Pourf
dyadique) Donc, cela teste si chaque booléen dans la liste est vrai.Exemples:
la source
~|/>+\,
>
est une "permutation de tri décroissante", donc~|/>+\,
donne vrai uniquement lorsque la liste d'entrée est vide ...CJam, 17 octets
Prend l'entrée comme un entier et un tableau de style CJam sur STDIN:
Testez-le ici.
la source
Pyth,
1615Essayez-le en ligne avec l'entrée
Explication:
Et encore une fois, la
s
fonction stupide gaspille deux octets. Je pense que je vais signaler cela comme un bug au dépôt Pyth.modifier: 13 (non valide)
Merci à isaacg pour un octet de sauvegarde (
>1
to!
) et pour avoir changé l'implémentation des
dans le repo Pyth. Maintenant, le code suivant est possible (mais bien sûr non valable pour ce défi).la source
!
au lieu de>1
.#sY
. Et merci pour la sauvegarde de 1 octet.R, 35
Essayez-le ici
la source
Julia, 33 octets
Cela crée une fonction sans nom qui accepte deux paramètres,
T
etl
, et renvoie un booléen.La
all()
fonction fait tout le gros du travail ici. Il prend deux arguments: un prédicat et un itérable. Pour le prédicat, nous lui disons qu'ili
représente la valeur actuelle de l'itérable en utilisant une fonction sans nom, spécifiée pari->
. Ensuite, à chaque itération, nous comparonsi
à l'T
utilisationi>=T
.Pour vous assurer que Julia ne panique pas d'utiliser
cumsum()
sur une liste vide, nous pouvons y mettre un zéro en utilisant[0, l]
.la source
Prelude ,
144136 bytesC'était ... dur ...
Je pense que 6 voix est un nouveau record pour moi, même si je suis sûr qu'il existe un moyen de réduire cela et de se débarrasser de beaucoup de ces espaces ennuyeux. Vérifier le signe d'une valeur (et donc vérifier si une valeur est supérieure à une autre) est assez délicat dans Prelude.
L'entrée et la sortie sont données sous forme de valeurs d'octets. Lorsque vous utilisez l'interpréteur Python , vous pouvez définir
NUMERIC_OUTPUT = True
, de sorte que vous obtenez réellement un ASCII0
ou1
. Pour la saisie numérique, vous devez ajouter un autreNUMERIC_INPUT
indicateur (je devrais probablement publier mon interprète modifié à un moment donné).Notez également que Prelude ne peut pas vraiment distinguer la fin d'une liste d'un
0
dans la liste. Donc, pour autoriser zéro transaction, je lisT
, puis la longueurL
de la liste, puis lesL
transactions.la source
CJam, 18 octets
Une autre approche dans les mêmes octets que l'autre.
Prend entrée via STDIN sous la forme de
<threshold> <array of transactions>
Essayez-le en ligne ici
la source
f>:|!
place de:)f<:&
JavaScript (ES6) 38
33Modifier le bug d'équilibre initial fixe. Thx @martin & @rainbolt
Tester dans la console Firefox / FireBug
la source
Python 2,7 - 55 octets
Appelez comme
print f(-5,[1,2,3,-20])
. Testez-le ici .Merci à Jakube pour son aide.
la source
> <>, 29 + 3 = 32 octets
Courir comme
où le seuil est le premier nombre.
la source
Octave, 27
la source
Perl 6 (21 octets)
C'est une fonction qui prend l'argument initial et la liste des éléments. Il fonctionne en vérifiant si aucun ( en utilisant des jonctions ) d'éléments n'est en dessous du seuil.
[\+]
est utilisé pour générer une somme cumulée, par exemple[\+] 1, 2, 3
donne1, 3, 6
.0,
ajouter0
au début de la liste est nécessaire en raison de l'exigence selon laquelle le seuil positif doit toujours échouer.À peu près la même chose que la solution Haskell, juste dans la syntaxe Perl 6 (Perl 6 a pris tellement de fonctionnalités de programmation soignées de Haskell).
la source
Perl - 20
Prenez la liste des numéros
STDIN
séparés par des sauts de ligne et prenezT
le-i
drapeau.+2 pour
-i
et-n
drapeaux. La valeur de sortie correspond255
aux échecs et0
au succès.Courir avec:
la source
Clojure, 45
Par exemple
Ou un peu plus agréable;
la source
Java 8 - 153 caractères
Fonction golf:
Non golfé:
Programme pilote:
}
Production:
la source