Défi relevé avec la permission de mon concours University Code Challenge
Après avoir terminé ses études il y a quelques mois, Marie a ouvert un compte bancaire pour commencer à recevoir le paiement de son premier emploi en ville. Depuis lors, elle a effectué quelques transactions avec elle. Son premier paiement était de 1 000 $. Avec cet argent, elle a payé un dîner dans lequel elle a invité ses parents (le dîner a coûté 150 dollars), puis elle a fait un achat dans un supermarché bien connu (80 dollars) et une réservation d'hôtel pour ses vacances (200 dollars). À la fin du mois, elle a de nouveau reçu son paiement (1040 dollars, un peu plus que le mois précédent) et le lendemain, elle a dépensé encore 70 dollars au supermarché.
Aujourd'hui, elle s'est rendu compte que si, après avoir payé les 80 premiers dollars au supermarché, un deuxième compte avait été créé et le premier gelé, les deux comptes auraient exactement le même solde:
L'événement était si rare pour elle qu'elle veut continuer à vérifier si les mouvements de son compte et ceux de ses amis ont aussi cette particularité ou non.
Défi
Étant donné une liste de transactions, affichez le nombre d'instants de temps pendant lesquels le propriétaire du compte bancaire aurait pu créer un deuxième compte afin que les deux aient le même solde final.
Exemple: [1000, -150, -80, -200, 1040, -70]
Cas de test
- Entrée:
1000 -150 -80 -200 1040 -70
Sortie:1
- Entrée:
100 -100
Sortie:2
- Entrée:
1 2 3
Sortie:1
- Entrée:
10 -20 15
Sortie:0
- Entrée:
15 -15 15 -15
Sortie:3
- Entrée:
1
Sortie:0
Remarques
- Vous pouvez supposer qu'il n'y aura aucune transaction de 0 $
- Vous pouvez prendre des commentaires de toute manière raisonnable
Réponses:
C # (Visual C # Interactive Compiler) , 63 octets
6 octets enregistrés grâce à dana
Essayez-le en ligne!
la source
Perl 6 , 25 octets
Essayez-le en ligne!
Explication
Nous ajoutons simplement un zéro à la liste donnée (
0,|$_
), faisons une séquence de sommes partielles avec[\+]
(c'est-à-dire la séquence formée par le premier élément, la somme des deux premiers, la somme des trois premiers, etc.), et recherchons (grep
) tout éléments qui sont exactement égaux à la moitié de l'état final du compte (somme de la liste donnée). Enfin, nous les comptons avec un+
.la source
05AB1E , 11 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Gelée ,
116 octetsEssayez-le en ligne!
la source
JavaScript (Node.js) , 45 octets
Essayez-le en ligne!
Économisez 4 octets en utilisant
-~o[s]
. Merci à Shaggy.la source
+
est changé en!
, donc cela pourrait fonctionner pour la saisie[100]
.Perl 5
-p
,4241 octets@NahuelFouilleul enregistre un octet
Essayez-le en ligne!
la source
y/ /+/;
sauve 1 octetJavaScript (ES6), 52 octets
Essayez-le en ligne!
Commenté
Version récursive,
5453 octetsEssayez-le en ligne!
la source
APL (Dyalog Unicode) , 21 octets SBCS
Fonction de préfixe tacite anonyme
Essayez-le en ligne!
⍳
ɩ ndices∘
du≢
décompte des transactions0,
ajouter zéro⊂(
…)¨⍨
Appliquer la fonction tacite suivante avec chacun de ceux-ci comme argument de gauche et la liste entière des transactions comme argument de droite (⍨
argument swaps⊂
la liste complète des transactions(
…)
comme argument de gauche pour la fonction ci-dessous¨
appliquée à chacun des indices⍨
avec des arguments échangés (c'est-à-dire la liste à droite, les indices à gauche:↓
laisser tomber autant de gens de la gauche1⊥
somme (lit. évaluer en base-1)(
…)=
Est-il (0/1) égal à…↑
prendre autant de transactions à gauche+/
les résumer+/
additionner cette liste booléenne pour obtenir le nombre de véritésla source
Lot, 84 octets
Prend l'entrée comme arguments de ligne de commande. Explication:
Joignez les arguments avec des espaces.
Remplacez les espaces par
+
s et évaluez le résultat. Effacez également le décompte.Pour chaque montant, soustrayez le double de la somme. Si le résultat est zéro, alors c'est une correspondance valide, alors incrémentez le nombre. Le zéro supplémentaire au début permet une correspondance avant tout montant.
Imprimez le résultat.
la source
Fusain , 15 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Malheureusement, le charbon de bois
Sum([])
ne l'est pas0
, je dois donc m'assurer qu'il y a toujours au moins un élément à additionner.la source
Python 3 ,
6758 octetsEssayez-le en ligne!
-9 octets grâce à @ Don't be a x-triple dot
la source
lambda l:sum(sum(l[:x])==sum(l[x:])for x in range(len(l)+1))
.sum(l[:x])*2==sum(l)
vous enregistre encore 2 octets.R ,
5037 octetsEssayez-le en ligne!
la source
MATL , 9 octets
Essayez-le en ligne!
Même approche que certaines autres réponses: ajoutez un zéro et vérifiez la fréquence à laquelle la moitié de la somme cumulée est égale à la somme totale.
la source
Japt
-x
,1411 octetsEssayez-le
la source
PowerShell ,
8882 octets-6 octets grâce à mazzy
Essayez-le en ligne!
Cela semble être une méthode très maladroite mais elle a fait le travail. Je vais essayer de le réorganiser à l'avenir.
la source
$i+=<predicate>
placeif(<predicate>){$i++}
PowerShell ,
494536 octetsEssayez-le en ligne!
la source
Brachylog , 9 octets
Pas aussi bon que le jour 1. Celui-ci perd à Jelly
Explication
Suite de tests: essayez-le en ligne!
la source
bash, 52 octets
TIO
L'astuce: définir
IFS=+
, se"$*"
développe en une chaîne où les arguments sont délimités par+
, dans l'expression arithmétique eval à la sommela source
Haskell,
4635 octetsEssayez-le en ligne!
la source
J , 19 octets
Essayez-le en ligne!
explication
la source