Éléments de tableau narcissique


15

Définition

Les entiers narcissiques 1 d'un tableau pensent qu'ils sont meilleurs que leurs voisins, car ils sont strictement supérieurs à leur moyenne arithmétique.

Les voisins sont définis comme suit:

  • Si l'entier est à l'index 0 (le premier), ses voisins sont le dernier et le deuxième élément de la liste.

  • Si l'entier n'est ni le premier ni le dernier, ses voisins sont les deux éléments immédiatement adjacents.

  • Si l'entier est à l'index -1 (le dernier), ses voisins sont l'avant-dernier et les premiers éléments de la liste.


Tâche

Étant donné un tableau d'entiers, votre tâche consiste à éliminer les narcissiques.

  • Les entiers peuvent être positifs, négatifs ou nuls.

  • Vous pouvez supposer que le tableau contient au moins trois éléments.

  • Toutes les règles standard s'appliquent. Il s'agit de , donc le code le plus court en octets l'emporte.

Exemples

Considérez le tableau [6, 9, 4, 10, 16, 18, 13]. Ensuite, nous pouvons construire le tableau suivant:

Élément | Voisins | Moyenne des voisins | Est narcissique?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Faux.
9 | 6, 4 | 5 | Vrai.
4 | 9, 10 | 9.5 | Faux.
10 | 4, 16 | 10 | Faux.
16 | 10, 18 | 14 | Vrai.
18 | 16, 13 | 14,5 | Vrai.
13 | 18, 6 | 12 | Vrai.

En filtrant les narcissiques, nous nous retrouvons avec [6, 4, 10]. Et c'est tout!

Cas de test

Entrée -> Sortie

[5, -8, -9] -> [-8, -9]
[8, 8, 8, 8] -> [8, 8, 8, 8]
[11, 6, 9, 10] -> [6, 10]
[1, 2, 0, 1, 2] -> [1, 0, 1]
[6, 9, 4, 10, 16, 18, 13] -> [6, 4, 10]
[6, -5, 3, -4, 38, 29, 82, -44, 12] -> [-5, -4, 29, -44]

1 - Narcissique ne signifie pas mathématiquement narcissique .

Réponses:


7

Gelée , 10 octets

ṙ2+ṙ-<ḤCx@

Essayez-le en ligne!

Explication:

ṙ2+ṙ-<ḤCx@
ṙ2         Rotate the original list two elements to the left
  +        Add each element to the respective element of the original list
   ṙ-      Rotate the result one element to the right
     <Ḥ    Check if each element is less than the double of its respective element on the original list
       C   Subtract each 1/0 boolean from 1 (logical NOT in this case)
        x@ Repeat each element of the original list as many times as the respective element of the logical NOT (i.e. keep elements of the original list where the respective element from the result is 1)


6

JavaScript (ES6), 57 56 octets

a=>a.filter((e,i)=>e+e<=a[(i||l)-1]+a[++i%l],l=a.length)

Edit: 1 octet enregistré grâce à @ g00glen00b.


5

Mathematica, 44 octets

Pick[#,#<=0&/@(2#-(r=RotateLeft)@#-#~r~-1)]&

Comment ça fonctionne

Étant donné une entrée telle que {11,6,9,10}, calcule

2*{11,6,9,10} - {6,9,10,11} - {10,11,6,9}

et sélectionne les éléments de l'entrée d'origine aux endroits où ce résultat est au plus égal à 0.



4

Haskell , 51 octets

f s=[b|(a,b,c)<-zip3(last s:s)s$tail$s++s,b*2<=a+c]

Essayez-le en ligne! Exemple d'utilisation: f [1,2,3]rendements [1,2].

Car s = [1,2,3], last s:sc'est la liste [3,1,2,3]et tail$s++sla liste [2,3,1,2,3]. zip3génère une liste de triplets à (a,b,c)partir de trois listes données, en tronquant les plus longs à la longueur de la liste la plus courte. Nous obtenons [(3,1,2),(1,2,3),(2,3,1)], en bétant l'élément de liste d'origine et aet cses voisins. La compréhension de la liste sélectionne alors tout bb*2<=a+c, ce bn'est pas narcissique.


4

Octave / MATLAB, 48 octets

@(x)x(conv([x(end),x,x(1)],[1,-2,1],'valid')>=0)

Essayez-le en ligne!

Explication

Le tableau d'entrée est d'abord étendu avec les dernières ( x(end)) et premières ( x(1)) entrées sur les côtés appropriés.

Le test de narcissisme se fait en convolving le tableau étendu avec [1, -2, 1]et en ne gardant que la 'valid'partie.

La comparaison de chaque entrée du résultat de convolution avec 0donne un index logique (masque) qui est utilisé pour sélectionner les nombres dans l'entrée.


2

J , 16 octets

#~+:<:1&|.+_1&|.

Essayez-le en ligne!

Explication

#~+:<:1&|.+_1&|.  Input: array A
           _1&|.  Rotate A right by 1
      1&|.        Rotate A left by 1
          +       Add
  +:              Double each in A
    <:            Less than or equal to
#~                Copy the true values from A

2

Japt , 17 16 15 octets

kÈ>½*[Y°ÉY]x!gU

Essayez-le


Explication

Entrée implicite du tableau U.

kÈ>

Remove ( k) les éléments qui retournent true lorsqu'ils sont passés par une fonction, avec Yétant l'index courant, qui vérifient si l'élément courant est supérieur alors ...

[Y°ÉY]

Le tableau [Y-1, Y+1]...

x!gU

Réduit par addition ( x) après l'indexation de chaque élément dans U...

½*

Multiplié par .5.


Alternative, 15 octets

fÈ+X§UgYÉ +UgYÄ

Essayez-le


2

R , 51 56 octets

Merci à user2390246 d'avoir corrigé mon algorithme

function(l)l[c(l[-1],l[1])+c(l[s<-sum(l|1)],l[-s])>=2*l]

Essayez-le en ligne!

index lc(l[-1],l[1])+c(l[s],l[-s]), les sommes voisines de l, ne sont pas inférieures à deux fois l.





1

Java 8, 141 137 127 octets

import java.util.*;a->{List r=new Stack();for(int i=0,l=a.length;i<l;)if(2*a[i]<=a[(i-1+l)%l]+a[++i%l])r.add(a[i-1]);return r;}

-10 octets grâce à @Nevay .

Explication:

Essayez-le ici.

import java.util.*;    // Required import for List and Stack

a->{                   // Method with integer-array parameter and List return-type
  List r=new Stack();  //  Return-list
  for(int i=0,         //  Index integer, starting at 0
      l=a.length;      //  Length of the input array
      i<l;)            //  Loop over the input array
    if(2*a[i]<=        //   If two times the current item is smaller or equal to:
        a[(i-1+l)%l]   //   The previous integer in the list
        +a[++i%l])     //   + the next integer in the list
      r.add(a[i-1]);   //    Add the current integer to the result-list
                       //  End of loop (implicit / single-line body)
  return r;            //  Return result-List
}                      // End of method


0

JavaScript ES5, 59 octets

F=a=>a.filter((x,i)=>2*x<=a[-~i%(l=a.length)]+a[(i-1+l)%l])

console.log(""+F([5, -8, -9])==""+[-8, -9])
console.log(""+F([8, 8, 8, 8])==""+[8, 8, 8, 8])
console.log(""+F([11, 6, 9, 10])==""+[6, 10])
console.log(""+F([1, 2, 0, 1, 2])==""+[1, 0, 1])
console.log(""+F([6, 9, 4, 10, 16, 18, 13])==""+[6, 4, 10])
console.log(""+F([6, -5, 3, -4, 38, 29, 82, -44, 12])==""+[-5, -4, 29, -44])




En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.