Étant donné un tableau d'entiers positifs, affichez un tableau de tous les éléments supérieurs ou égaux aux éléments adjacents. La plupart des éléments auront deux éléments adjacents; le premier et le dernier élément sont des cas spéciaux, car ils n'ont qu'un seul élément adjacent.
Vous pouvez supposer que le tableau contient au moins deux éléments.
Cas de test:
Input | Output
[4,2,6,12,4,5,4,3] | [4,12,5]
[1,2] | [2]
[1,2,3,2,1] | [3]
[3,2,1,2,3] | [3,3]
[4,4] | [4,4]
[2,4,4,4,1] | [4,4,4]
[2,3,3,4] | [3,4]
[4,3,3,4] | [4,4]
C'est le code-golf , le code le plus court gagne!
[4,3,3,4]
comme testcase. Malheureusement, ma solution ne l'a pas très bien géré.Réponses:
Gelée ,
13 1211 octetsUn lien monadique prenant une liste d'entiers positifs et renvoyant la liste filtrée contenant uniquement ceux qui sont supérieurs ou égaux à tous leurs voisins.
Essayez-le en ligne!
12 octets précédents :
13 octets précédents :
Comment?
la source
»
- que diriez-vous de 10 cependant ..?Python , 54 octets
Essayez-le en ligne!
Les E / S utilisent des tuples plutôt que des listes.
Python , 57 octets
Essayez-le en ligne!
Alt 57:
la source
Mathematica 22 octets
la source
Haskell,
504942 octetsEssayez-le en ligne!
scanr(:)[0]
fait une liste des queues de(0:l)
, chacune avec une finale0
, par exemple pourl = [4,3,3,4]
:[[0,4,3,3,4,0],[4,3,3,4,0],[3,3,4,0],[3,4,0],[4,0],[0]]
qui est le modèle identifié againsi:j:k:_
pour extraire toutes les listes avec au moins 3 éléments qui sont nommési
,j
etk
. Gardezj
si son> =i
etj
.Edit: Ørjan Johansen a enregistré 7 octets. Merci!
la source
i:j:k:_<-scanr(:)[0]$0:l
est plus court. (Ajuster légèrement l'tails=scanr(:)[]
astuce "standard" .)Dyalog APL,
31302822 21octetsEssayez-le en ligne!
Explication (je ne suis pas bon pour expliquer les choses):
la source
Haskell , 40 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 40 octets
la source
Python 3 ,
84 75 *71 octetsEssayez-le en ligne!
* @ LeakyNun a économisé 9 octets en utilisant une astuce d'opérateur astucieux.
la source
lambda l,k=[0]:[l[i]for i in range(len(l))if(k+l+k)[i+2]<=l[i]>=(k+l+k)[i]]
Gelée , 15 octets
Essayez-le en ligne!
la source
05AB1E ,
151413 octetsEssayez-le en ligne!
Explication
Solution précédente de 15 octets
Essayez-le en ligne!
Explication
la source
R, 44 octets
qui évalue à la fonction:
Par rapport
x
àc(0,x)
, donc avecx
une position décalée vers la droite. Se compare égalementx
àx[-1]
, donc une position décalée vers la gauche. Ces deux sontTRUE
s'il y a un maximum là-bas.&
pour prendre le ET de ces booléens. En raison de la nature enveloppante des vecteurs de R lorsqu'ils ne sont pas de la même longueur, nous devons tronquer le résultat à la longueur dex
, qui est trouvée en prenantsum(x|1)
. On branche ensuite le vecteur booléen, en ne prenant que les vrais indices dex
et en retournant cela.Notez que parce que ces opérations logiques sont effectuées avec des vecteurs de longueur inégale, R se plaindra. Beaucoup. Mais la sortie correcte sera là au milieu des avertissements:
la source
R , 42 octets
Essayez-le en ligne!
2 octets de moins que la solution JAD .
diff
calcule les différences successives; puis ne conservez que les entrées supérieures aux deux voisins.la source
Pyth , 20 octets
A jouer au golf ...
Suite de tests.
la source
R , 68 octets
Essayez-le en ligne!
la source
pryr::f(expression)
est un moyen plus court de déclarer une fonction quefunction(a)expression
.sum(a|1)
un raccourci pourlength(a)
.PHP , 67 octets
Essayez-le en ligne!
la source
Rétine , 51 octets
Essayez-le en ligne
la source
q, 39 octets
la source
Stax , 10 octets
Exécuter et déboguer
Il produit la sortie sous forme de valeurs séparées par des sauts de ligne sur la sortie standard.
Déballé, non golfé et commenté, il ressemble à ceci.
Exécutez celui-ci
Mise à jour: Je viens de trouver une solution à 9 octets. Met à jour l'explication plus tard:
Stax , 9 octets
Exécuter et déboguer
la source
Perl 5
-a
, 37 octetsEssayez-le en ligne!
la source