À partir d’une liste d’entiers positifs, il faut déterminer s’il existe un élément supérieur ou égal à ses deux voisins ou inférieur à ses deux voisins (un "sursaut"). Pour être clair, une bosse ne peut jamais être le premier ou le dernier élément de la liste car ils n'ont qu'un seul voisin.
Votre programme doit générer l'une des deux valeurs cohérentes correspondant chacune à une liste sans relief ou à une liste avec relief. Quelles que soient les valeurs n'a pas d'importance, vous pouvez les choisir vous-même.
C'est du code-golf donc les réponses seront notées en octets, moins d'octets étant meilleurs.
Cas de test
[] -> False
[1] -> False
[1,2] -> False
[1,2,1] -> True
[1,2,2] -> False
[1,2,3] -> False
[1,2,2,1] -> False
[1,2,2,3] -> False
[1,2,1,2] -> True
[1,3,2] -> True
[3,1,2] -> True
[2,2,2] -> False
code-golf
number
array-manipulation
decision-problem
Assistant de blé
la source
la source
[1,3,3]
(s'assure que les réponses utilisant l'algorithme de Dennis prennent le signe des incréments plutôt que d'utiliser simplement les incréments eux-mêmes)[1,2,2]
? Ou est-ce que je manque quelque chose?[1,2,2]
sont les mêmes que les signes de ces deltas mais ce n'est pas le cas avec[1,3,3]
.Réponses:
Gelée , 5 octets
Renvoie 0 s'il y a une bosse, 1 sinon.
Essayez-le en ligne!
Comment ça marche
la source
JavaScript (ES6), 38 octets
Retourne un booléen.
Cas de test
Afficher l'extrait de code
Comment?
Nous utilisons a pour stocker la valeur précédente de n . Nous fixons x à 1 si a <n , -1 si a> n ou 0 si a = n . Et nous testons si old_x * x <0 , ce qui n’est possible que si ( old_x = 1 et x = -1 ) ou ( old_x = -1 et x = 1 ).
Puisque x est initialisé à la fonction de rappel anonyme de some () , il est forcé à NaN lors de la première itération, ce qui rend le test faux.
la source
Haskell , 42 octets
Essayez-le en ligne!
Explication
Nous avons d’abord la fonction
f
qui prend une fonction binaire et une liste et applique la fonction binaire à chaque paire adjacente de la liste.Ensuite, notre fonction principale s'applique
f(-)
à la liste de saisie. Ceci calcule la liste de différence. Nous appliquons ensuitef(*)
à la liste pour multiplier chaque paire adjacente. Enfin, nous demandons si une paire est inférieure à zéro.Un nombre dans la liste de fin ne peut être négatif que s'il est le produit d'un nombre négatif et positif de la liste de différences. Ainsi, pour produire une entrée négative (puis renvoyer true), la liste d'origine doit passer de croissant à décroissant ou inversement, c’est-à-dire qu’elle doit présenter une bosse.
la source
Python 2 , 43 octets
Renvoie True s'il y a une bosse, des erreurs s'il n'y en a pas. ( autorisé par défaut )
Essayez-le en ligne!
la source
Octave avec paquet d'images,
3432 octets2 octets sauvés grâce à @StewieGriffin !
Essayez-le en ligne!
Explication
Calcule les différences consécutives, les arrange en blocs coulissants de longueur 2, obtient le produit de chaque bloc et teste si un tel produit est négatif.
la source
0||prod(...)
enregistre 2 octets. Vous pouvez également ignorer la totalité de laany
partie et utiliser la définition par défaut vérité / fausseté pour économiser 5 octets .any
. Merci pour l'0||
idée!R, 48 octets
Essayez-le en ligne!
Comment cela fonctionne pas à pas en utilisant c (1,4,1,4) comme exemple:
En prime, voici une solution de longueur et de concept similaires utilisant le package
zoo
:la source
embed
existe. C'est dommagerowProds
etcolProds
n'existe pas comme alias dans R.rowSums
etrowMeans
....colSums
allez réorganiser les entrées dans une matrice basée sur des entrées supplémentaires qui a probablement une application de golf quelque part ... maintenant, je dois juste en trouver une!matrixStats
paquet.function(x)any(matrixStats::colProds(embed(diff(x),2)))<0
. Mais pour quelque chose d'autre que le code golf, ce paquet est vraiment un trésor.Haskell , 33 octets
Essayez-le en ligne!
True
s'il y a une bosse, des erreurs s'il n'y en a pas.la source
l`zip3`tail l$drop 2l
est juste un cheveu plus court. Je me demande si la correspondance des modèles est encore plus courte?Perl 6 , 39 octets
Essayez-le en ligne!
$_
est l'argument de liste de cette fonction anonyme..[1..*]
est la même liste, mais avec le premier élément supprimé.Zcmp
Zip les deux listes avec l'cmp
opérateur, résultant en une liste deOrder
valeurs. Par exemple, pour une liste d'entrée,1, 2, 2, 2, 1
cela donnerait la listeMore, Same, Same, Less
.Il suffit maintenant de savoir si cette liste contient deux éléments adjacents
More, Less
ouLess, More
. L’astuce que j’ai utilisée est de convertir la liste en une chaîne délimitée par des espaces~
, puis de vérifier si elle contient une sousre L
- chaîne ou une chaîne.s M
. (Le premier ne peut pas être simplemente L
parce qu'ilSame
se termine également par un "e".)L'opérateur de correspondance intelligente renvoie un
Match
objet (si la correspondance est réussie) ouNil
(si ce n'est pas le cas), ilso
convertit donc ce qu'il est en valeur booléenne.la source
Wolfram Language (Mathematica) , 40 octets
Essayez-le en ligne!
la source
Ruby ,
5546 octetsEssayez-le en ligne!
Un lambda acceptant un tableau et retournant un booléen.
-9 octets: remplacer
(x<y&&y>z)||(x>y&&y<z)
par(y-x)*(y-z)>0
(merci à GolfWolf )la source
|
au lieu de||
, vous économisant 1 octet.PostgreSQL 173 octets
la source
Java 8,
10810410186847972 octets-2 octets grâce à @ OlivierGrégoire .
-13 octets grâce à @Nevay .
Essayez-le en ligne.
la source
-1
.a->{int i=a.length;for(;i-->2;)i|=(a[i]-a[--i])*(a[i]-a[i-1])>>-1;return-~i|3;}
(returns-1
for truthy cases,3
for falsey cases) - or, if using the presence/absence of an exception as return value 55 bytes:a->{for(int i=0;++i>0;)i|=(a[i-1]-a[i])*(a[i]-a[i+1]);}
a->{int i=a.length,p=0;for(;i-->1;)i|=p*(p=a[i]-a[i-1])>>-1;return-i>1;}
R,
5856 bytesTry it online!
Saved 2 bytes thanks to Giuseppe
la source
{}
for -2 bytes.c()
isNULL
which is not the same as the empty vector of integers,integer(0)
, whereas in MATLAB[]
is adouble
by default, but if you want to keep it this way, that's perfectly reasonable.J,
1615 bytes-1 byte thanks to FrownyFrog
Try it online!
Original: 16 bytes
2-/\]
- differences of each adjacent items2*/\
- products of each adjacent items[:<./
- the minimum0>
- is negative?Try it online!
la source
f=.
bytes. Please have in mind that I'm relatively new user :)1 e.0>2*/\2-/\]
Japt, 11 bytes
-5 bytes thanks to @ETHproductions
Try it online! | Test cases
This uses Dennis's algorithm
la source
Japt, 9 bytes
Try it online!
A mashup of Oliver's answer with the approach used by several other answers.
la source
Attache, 39 bytes
Try it online!
Pretty happy with how this turned out.
Explanation
This is a composition of four functions:
Delta
gets the differences between elements. =Then,
Sign
is applied to each difference, giving us an array of1
s,0
s, and-1
s. =Then,
Slices&2
gives all slices of length two from the array, giving all pairs of differences.Finally,
Any&:&{_*~?Sum[__]}
is equivalent to, for inputx
:This searches for elements which sum to zero but are not zero. If any such pair of elements exist, then there is a bump.
la source
MATL, 8 bytes
Try it online!
la source
Husk, 7 bytes
Try it online!
Explanation
la source
Octave, 33 bytes
Try it online!
Explanation:
la source
Brachylog, 10 bytes
Try it online!
Succeeds (
true.
) if there is a bump, and fails (false.
) if there is no bump.Explanation
This is fairly readable already:
la source
05AB1E, 7 bytes
Try it online!
Explanation
la source
0‹
that basically checks the number for a negative sign?d
used to check that top of stack only contained[0-9]
, which is the opposite of what we want here. But now it's more intelligent and negative/floats are also counted as numbers.a
saw thenegative
sign and returned true or something... But I think you're right, I'm remembering yourd
trick.Brachylog, 10 bytes
Try it online!
Not nearly as neat and elegant as @Fatalize's existing 10 byte answer, but it works!
la source
Husk, 9 bytes
Try it online!
Uses Dennis's algorithm.
la source
Perl 5, 54 + 2 (
-pa
) = 56 bytesTry it online!
la source
Python 2, 60 bytes
Try it online!
Pretty much the same thing, thought it would be shorter though...
Python 2, 63 bytes
Try it online!
la source
Pyt,
117 bytesOutputs 1 if there is a bump, 0 otherwise
Try it online!
Port of Wheat Wizard's Haskell answer
Old way (11 bytes):
Try it online!
Returns False if there is a bump, True otherwise
Port of Dennis' Jelly answer
la source
Wolfram Language (Mathematica),
3736 bytesGives the opposite of the test case answers (False and True reversed). Prepend a
!
to switch to the normal form.OR
Also reversed output, so replace
FreeQ
withMatchQ
for normal form.Explanation: Take the sign of the differences of the sequence. Iff the resulting sequence includes {1,-1} or {-1,1} there is a bump. The absolute value the differences of {1,-1} or {-1,1} is 2 in either case.
Shave off another byte by squaring the final list instead of taking the absolute value:
Try it online!
la source
Perl, 35 bytes
Includes
+3
for-p
bump.pl
:Run as:
la source
Julia 0.6,
5756 bytesBasically just totallyhuman's python answer. -1 byte from user71546
Try it online!
Julia 0.6, 39 bytes
Lispy recursion style, aka Dennis's python answer. Returns
true
when a bump exists, otherwise throws an error. This should maybe be 42 bytes since you have to splat it when calling. Eg fora=[1,2,1]
you call asf(a...)
.f(a)=f(a...)
would remove that need, but is longer. I need to get better a recursion, and I don't really like writing code that throws an error.Try it online!
la source
for
is not necessary ;)