Ce problème est "inspiré" d'une question posée à l'origine sur Quora (pas pour le golf à code). Je veux juste en faire un défi pour vous les gars (et ma première soumission de problème ici).
Étant donné un tableau d'éléments entiers v
et un entier d
(nous supposons que d est inférieur ou égal à la longueur du tableau), considérons toutes les séquences d' d
éléments consécutifs dans le tableau. Pour chaque séquence, calculez la différence entre la valeur maximale et minimale des éléments de cette séquence et nommez-la l'écart.
Votre tâche consiste à écrire un programme ou une fonction qui calcule la valeur maximale parmi tous les écarts de toutes les séquences considérées ci-dessus, et à retourner ou à sortir cette valeur.
Exemple élaboré:
v: (6,9,4,7,4,1)
d: 3
The sequences of length 3 are:
6,9,4 with deviation 5
9,4,7 with deviation 5
4,7,4 with deviation 3
7,4,1 with deviation 6
Thus the maximal deviation is 6, so the output is 6.
C'est le golf de code, donc la réponse la plus courte en octets l'emporte.
with
sur une fonction lambda entièreUncaught SyntaxError: Unexpected token with
. Pouvez-vous publier un extrait de travail?with(Math)
, ou utiliserf=eval("with(Math)(v,d)=>max(...a)))")
.Python, 60 octets
Économiser 5 octets grâce à Neil
Ma première lambda récursive!
Usage:
la source
v and
; la plage ne monte pas si vous supprimez des éléments.Perl, 48 octets
Comprend +5 pour
-0pi
Donnez la largeur après l'
-i
option, donnez les éléments sous forme de lignes distinctes sur STDIN:Juste le code:
(utilisez un littéral
\n
pour le score revendiqué)la source
$&
contiendra la correspondance entière qui sera évaluée comme le premier nombre dans le contexte arithmétique.$1
contiendra le dernier numéro. J'échoue alors avec force le regex avec\A
. Il essaiera donc toutes les positions de départ et toutes les longueurs jusqu'à la largeur. J'utilise la valeur absolue de la différence comme index de tableau et vois la taille du tableau. Perl n'a pas de fonction intégréemax
, je dois donc improviser-0pi3 -e
en-0pi3e
? Juste une hypothèse sur une éventuelle réduction, je n'utilise pas perl (donc ma question).-i
mange tout après sa valeur, y compris toute
-e
doit aller juste avant le code? Bummer.R,
636256 octetsBillywob a déjà fourni une excellente réponse R en utilisant uniquement les fonctions de base . Cependant, je voulais voir si une approche alternative était possible, peut-être en utilisant certains des packages complets de R. Il y a une belle fonction
rollapply
dans lezoo
package conçue pour appliquer une fonction à une fenêtre déroulante d'un tableau, ce qui correspond bien à nos besoins. Nous utilisonsrollapply
pour trouver lemax
de chaque fenêtre, et nous l'utilisons à nouveau pour trouver lemin
de chaque fenêtre. Ensuite, nous prenons la différence entre les maximales et les minutes, ce qui nous donne l'écart pour chaque fenêtre, puis renvoyons lamax
de celles-ci.la source
gtools::rolling
, mais c'est un octet de plus et je ne le connais pas. J'ai toujours deux idées sur l'utilisation de packages non-base: d'une part, on a l'impression de tricher quand il y a une solution simple; d'autre part, les packages (et la communauté) sont l'un des points forts de R en tant que langage, je pense.R,
8077 octets octetsEdit: sauvé 3 octets grâce à @rturnbull
la source
1:(length(s)-d+1)
pard:sum(1|s)-d+1
.PowerShell v2 +, 68 octets
Solution itérative. Boucles à travers
$v
, mais nous utilisons vraiment cela comme un compteur plutôt que de passer réellement par les valeurs. Chaque itération, nous sommes découpage en tranches$v
par$i..($i+++$d-1)
, où la$i
valeur par défaut0
. Nous|sort
ces éléments et stockons le résultat dans$x
. Ensuite, nous prenons le plus grand[-1]
et soustrayons le plus petit[0]
. Nous avons ensuite|sort
ces résultats et prenons le plus grand[-1]
de cela. Ce nombre est laissé sur le pipeline et la sortie est implicite.Exemples
la source
05AB1E ,
1210 octetsUtilise l' encodage CP-1252 .
Essayez-le en ligne!
Explication
la source
Java 8,
140128Rasé un tas, en partie grâce à VTCAKAVSMoACE.
Non golfé
la source
int l(int[]a,int d){int x=0,i=0,f,j,k;for(;i<=a.length-d;i++)for(j=i;j<i+d;j++)for(k=j;k<i+d;)x=(f=a[j]-a[k++])<0?-f:f>x?f:x;return x;}
Mathematica,
4137 octetsla source
{-1,1}
pour éviter celaAbs
?Max[BlockMap[MinMax,#,#2,1].{-1,1}]&
.Rubis, 45 octets
Je pense que cela pourrait être beaucoup mieux.
la source
MATLAB avec statistiques et boîtes à outils de traitement d'image, 33 octets
Cela définit une fonction anonyme. Exemple d'utilisation:
Vous pouvez également l' essayer sur Octave à Ideone (mais Octave, contrairement à Matlab, nécessite de charger explicitement le paquet d'images).
Explication
la source
Scala, 48 octets
Non golfé:
Explication:
la source
MATL , 10 octets
Essayez-le en ligne!
Explication
Prenons l'exemple des entrées [6,9,4,7,4,1], 3.
la source
En fait , 13 octets
Essayez-le en ligne!
-6 octets de l'observation dans la réponse Haskell de nimi , que les tranches plus courtes que
d
n'affectent pas l'écart maximum.Explication:
la source
PHP,
8987 octetsPas particulièrement intelligent ou joli mais ça marche. Utilisez comme:
pour
v
=6,9,4,7,4,1
,d
=3
Edit: 2 octets enregistrés grâce à Jörg Hülsermann
la source
echo+$o;
au lieu deecho$o?:0;
CJam , 17 octets
(Aussi
q~ew:$z)\(\;.-:e>
)Essayez-le en ligne!
Explication
la source
Java 7,159 octets
Java = cher (je sais qu'il peut être joué beaucoup plus)
Non golfé
la source
Haskell, 56 octets
Exemple d'utilisation:
3 # [6,9,4,7,4,1]
->6
.Compte tenu des plages moins
d
ne change pas le maximum d' ensemble, afin que nous puissions courirtake d
jusqu'à la fin de la liste (c. -à inclure également les gammes avec les derniersd-1
,d-2
...0
éléments). La récursivité s'arrête avec la liste vide où nous définissons l'écart0
.la source
Java, 126 octets
Je me suis inspiré de la réponse de dpa97 et j'ai trouvé ceci:
Code développé, golfé et exemple
la source
Raquette 121 octets
Non golfé:
Essai:
Production:
la source
q, 25 octets
mmax
etmmin
sont des fenêtres coulissantes maximum et minimum respectivementExemple
la source
C #, 131 octets
voici une solution linq verbeuse
la source
C #, 163 octets
Golfé:
Non golfé:
Tester:
Production:
la source
Pyth, 11 octets
Explication
la source
Gelée , 8 octets
Essayez-le en ligne!
Utilise le même algorithme que Dyalog APL, mais je l'ai compris moi-même avant de le regarder.
Explication:
Note:
x
,y
sont à gauche, à droite respectivement arguments.la source
Perl 6 , 44 octets
$^a
et$^b
sont les deux arguments de la fonction, appelésv
etd
respectivement dans l'énoncé du problème. Larotor
méthode renvoie la séquence de sous-séquencesv
de tailled
.la source
Clojure,
7367 octetsModifier: utiliser à la
#(...)
place de(fn[...])
etfor
au lieu demap
.la source
Python 3, 80 octets
la source
(max(v[i:i+d])-min(v[i:i+d])for i in range(-~len(v)-d)
place demap(lambda g:max(g)-min(g),[v[i:i+d]for i in range(-~len(v)-d)])