Définissez le "sous-tableau maximum" d'un tableau donné comme "un sous-tableau (consécutif) qui a la plus grande somme". Notez qu'il n'y a aucune exigence "non nulle". Sortez cette somme.
Donnez une description de votre code si possible.
Exemple d'entrée 1:
1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14
Exemple de sortie 1: 24
Description 1:
La plus grande somme est obtenue en découpant 6 7 -8 9 10
et en résumant.
Exemple d'entrée 2: -1 -2 -3
Exemple de sortie 2: 0
Description 2: C'est simple :) Un sous-tableau vide est le "plus grand".
Exigence:
- Ne lisez rien sauf stdin, et la sortie devrait aller à stdout.
- Des restrictions d' échappatoires standard s'appliquent.
Classement: Le programme le plus court remporte ce code-golf .
Réponses:
Husk ,
64 octetsEssayez-le en ligne!
la source
Python 3 , 61 octets
Essayez-le en ligne!
Algorithme volé sur Wikipedia .
la source
Pyth , 8 octets
Essayez-le en ligne!
Comment?
la source
05AB1E , 4 octets
Essayez-le en ligne!
-1 merci à Adnan .
la source
ÎŒOM
devrait fonctionner pendant 4 octets.M
recherche le plus grand nombre dans la version aplatie de la pile.Gelée , 6 octets
Essayez-le en ligne!
la source
C ++,
197195187 octets-10 octets grâce à Zacharý
la source
l
et deh
toute façon?R , 54 octets
Essayez-le en ligne!
Algorithme tiré de: problème de sous-réseau maximum
R , 65 octets
Essayez-le en ligne!
x
depuis stdin.y
comme index dex
.m
(initialementm=0
).m
.m
.R , 72 octets
Essayez-le en ligne!
x
depuis stdin.m
(initialementm=0
).m
.m
.Autres idées infructueuses
58 octets
63 octets
72 octets
la source
a=b=0
fonctionne aussi. Vous devez également gérer l'impression de la sortie. Lorsqu'il est exécuté en tant que programme complet (viasource
), cela n'imprime rien.cat(b)
, mais s'il provient de lui,echo=TRUE
il suffit d'appelerb
pour l'impression.T=F
au lieu dea=b=0
pour enregistrer deux octets, carmax
contraindrab
ànumeric
.Haskell , 28 octets
Essayez-le en ligne!
la source
scanl
? alorsfoldl((max<*>).(+))0
??05AB1E , 4 octets
-2 octets grâce à Adnan
Essayez-le en ligne!
la source
ÎŒOM
devrait fonctionner pendant 4 octetsMathematica, 24 octets
la source
Haskell ,
4133 octetsEssayez-le en ligne! merci à Laikoni
la source
g=
. Au lieu deconcatMap
vous pouvez utiliser à=<<
partir de la liste monade: Essayez-le en ligne! (33 octets).Japt , 11 octets
Essayez-le en ligne!
Explication
Méthode alternative, 11 octets
De @ETHproductions; basé sur la réponse Husk de Brute Forces .
Obtient toutes les queues du tableau d'entrée et additionne chacune cumulativement. Aplatit ensuite le tableau et obtient le maximum.
Essayez-le en ligne!
la source
£sY å+Ãc rw
(également 11 octets)Rubis,
615957 octetsJe viens de commencer à apprendre Ruby, c'est donc ce que j'ai trouvé.
J'ai vu cet algorithme pour la première fois dans la version finlandaise de ce livre inachevé . C'est très bien expliqué à la page 23.
Essayez-le en ligne!
la source
JavaScript, 58 octets
Implémentation JS golfée de l'algorithme de Kadane. Fabriqué aussi court que possible. Ouvert aux suggestions constructives!
Ce que j'ai appris de ce post: la valeur de retour de
eval
- lorsque son dernier état est unefor
boucle - est fondamentalement la dernière valeur présente à l' intérieur de la boucle. Cool!EDIT: économisé quatre octets grâce aux suggestions de Justin et Hermann.
la source
return
en remplaçant{...;return b;}
pareval("...;b")
puisque eval renvoie la dernière instruction.;b
, car il est renvoyé de la boucle forGaia, 6 bytes
Try it online!
la source
Python 2,
5251 bytesTry it online!
la source
Common Lisp, 73 bytes
Try it online!
la source
k, 14 bytes
Try it online!
la source
APL,
312927 bytesTry it online! (modified so it will run on TryAPL)
How?
∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕
Generate sums of subvectors⌈/
Maximumla source
CJam, 24 bytes
Function that takes array of numbers as input.
Try it Online
la source
MY, 11 bytes
Try it online! MY is on TIO now! Woohoo!
How?
⎕
= evaluated input𝟚
= subvectors35ǵ'
=chr(0x53)
(Σ, sum)ƒ
= string as a MY function⇹
= map(
= apply⍐
= maximum↵
= output with a newline.Sum was fixed (
0
on empty arrays) in order for this to work. Product was also fixed.la source
J, 12 bytes
Similar to zgrep's K solution: the scan sum of all suffixes (produces a matrix), raze, take max
Try it online!
NOTE
for not too many more bytes, you can get an efficient solution (19 bytes golfed):
la source
Axiom, 127 bytes
This would be O(#a^3) Algo; I copy it from the C++ one... results
la source
Scala, 105 bytes
I didn't find any better way to generate the sub
listsarrays.la source
Java 8, 242 bytes
Try it here.
106 bytes without using STDIN/STDOUT requirement.. >.>
Try it here.
Explanation:
la source