Stock Time Machine
Vous avez accès à un ensemble de données tomorrowStocks
contenant les cours des actions de votre entreprise préférée sur le NASDAQ. Cet ensemble de données est un conteneur indexé par minutes après l'ouverture. Chaque indice contient le prix du stock à ce moment.
// Assume the stock market opens at 9:30AM EDT
// tomorrowStocks[] contains the prices of your target stock.
// If the stock is $22 @ 10:30AM EDT
tomorrowStocks[60] == 22
Sortie
Votre tâche est de déterminer le meilleur résultat possible 1 purchase
et 1 sale
de 1 stock
de l'ensemble de données.
Gotchas
- Vous devez acheter et vendre exactement 1 action.
- Vous ne pouvez pas acheter et vendre dans le même créneau horaire.
- Vous devez acheter avant de vendre.
Données de test
[1,2,3,4,5] # 4
[1,99,2,105] # 104
[99,1,99,100] # 99
[99,1,1,2,1,3] # 2
[5,4,3,3,1] # 0
[5,4,3,1] # -1
[5,2,1] # -1
[5,4,1] # -1
[55,45,20,1] # -10
[5,1] # -4
[10,7,5,1] # -2
[7] # Invalid input -- assume size >= 2
C'est un code-golf ; Soumettez la réponse la plus courte dans votre langue préférée!
[5,4,3,1]
vous pouvez soit5
et vendre,4
soit acheter pour4
et vendre pour3
obtenir le résultat optimal-1
.Réponses:
05AB1E , 4 octets
Utiliser l'approche de FryAmTheEggman . Code:
Explication:
Utilise le codage CP-1252 . Essayez-le en ligne! .
la source
Python 2, 46 octets
Testez-le sur Ideone .
Comment ça marche
Cette approche récursive tire parti des comparaisons magnifiquement perverses de Python 2.
Le meilleur résultat possible est soit la différence entre le maximum de la liste avec son premier élément supprimé et ce premier élément, soit une autre différence n'impliquant pas le premier élément.
Après avoir extrait le premier élément avec
x.pop(0)
(ce qui le supprime définitivement de x ), nous calculonsx.pop(0)-max(x)
. Notez que cette différence a le "mauvais" signe.Si la liste mise à jour x contient toujours au moins deux éléments,
x[1:]
génère une liste non vide et laand
remplace par le négatif d'un appel récursif, calculé comme suit-f(x)
. Une fois qu'il y a trop peu d'éléments pour continuer, la liste estx[1:]and-f(x)
évaluée.Pour sélectionner le résultat maximal, nous prenons le minimum de la différence et le négatif de l'appel récursif (ou
[]
). Puisque tous les entiers sont strictement inférieurs à[]
,min
retournera simplement son argument de gauche si le bon est[]
.Enfin, le moins unaire
-
corrige le signe du résultat calculé.la source
MATL , 7 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
la source
Gelée , 5 octets
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
IŒṡS€Ṁ
Presque la même longueur, c'est dommage de l'utiliserṀ
avant de faire la somme donne parfois la mauvaise réponse ...Pyth, 9
Essayez-le ici ou lancez une suite de tests .
Trouve les différences consécutives entre chaque élément, puis trouve chaque sous-chaîne de ce tableau. Enfin, somme les éléments et retourne le maximum.
Explication:
On m'a dit que le fonctionnement de cet algorithme n'était pas totalement intuitif. Espérons que cet exemple illustrera pourquoi cet algorithme fonctionne:
la source
Pyth, 9
Yay pfns!
la source
_hS-M.cQ2
c'est équivalent.-
l'ordre des arguments ... depuis que je dois utiliser_hS
et ne peux pas utilisereS
PowerShell v2 +, 58 octets
Prend les entrées
$n
, dirige chaque élément dans une boucle|%{...}
. À chaque itération, nous découpons en$n
fonction de la valeur pré-incrémentée++$i
à la fin du tableau en entrée|sort
, puis prenons le maximum[-1]
puis soustrayons l’élément actuel$_
. Nous avons ensuite|sort
toutes ces différences et prenons à nouveau le maximum[-1]
.Efface une erreur d’index de tableau commentée, car nous essayons de couper au-delà de la fin du tableau. Mais, puisque STDERR est ignoré par défaut , nous ne nous en soucions pas.
la source
JavaScript (ES6),
5754 octetsEn JavaScript, il est plus facile de prendre le maximum du reste du tableau et de soustraire l'élément en cours. (Dans le cas du dernier élément, le résultat sera toujours -Infinity.) Edit: 3 octets enregistrés grâce à @CharlieWynn.
la source
with
(ce qui n'aide pas dans ce cas).J, 21 octets
Prend un tableau de valeurs en tant qu'argument et renvoie le résultat.
Explication
la source
Java, 141 octets
Le lambda accepte une ArrayList et retourne un Integer.
Code non-golfé avec cas de test:
Autant que je sache, Java ne dispose d'aucun moyen de regarder dans un flux, et la manipulation de la méthode à partir de laquelle le flux est généré produit des résultats étranges. Faire ainsi à l'
a.remove(0)
intérieur d'une carte brise horriblement le flux.la source
VBA, 154
Prend en entrée dans la colonne A à partir de A1, sorties en C1. Doit être exécuté avec la dernière cellule de A sélectionnée. Notez que Excel ajoute automatiquement les espaces entre les termes dans VBA, sinon cela pourrait être joué davantage.
la source
Java, 116
Une autre solution java, j’ai utilisé celle-ci pour prouver que les jets pourraient bien paraître, mais pas toujours utiles pour le golf.
il y a beaucoup de place pour des améliorations dans cette solution
la source
Clojure, 99 octets
Divise la liste d'entrée en première position, puis seconde et ainsi de suite, nous obtenons donc une liste qui ressemble à ceci:
[[[n1][n2 ... nk]][[n1 n2][n3 ... nk]]...[[n1...n(k-1)][nk]]]
puis, pour chaque paire, soustrait le minimum des premiers éléments du maximum du second élément, puis en trouve le maximum. Ce serait plus court si Clojuremin
max
prenait des séquences plutôt qu'un nombre quelconque d'arguments.Voir en ligne: https://ideone.com/b2nllT
la source
ruby, 52 octets
apparaît les prix de vente possibles et regarde tout le précédent pour trouver un profit. Puis obtient un profit maximum.
la source
C,
101 à99 octetsEntrée: tableau terminé par zéro. Exemple: {1,2,3,4,5,0}
Sortie: renvoie le meilleur résultat.
Vous pouvez économiser 8 octets (
9391 au total) si vous ne voulez jamais perdre d’argent:la source
R,
5844 octetsnon-golfé
EDIT: fonction modifiée. original ci-dessous.
ou, si vous êtes prêt à recevoir un tas de messages d'avertissement, supprimez le -2 après la longueur, pour 56 octets.
Et si vous avez envie de ne pas trader et de perdre de l'argent alors que c'est la seule possibilité, vous pouvez vous contenter de 52
la source
f=
n'est pas nécessaire.