Elementos de matriz narcisista

15

Definición

Los enteros narcisistas 1 de una matriz piensan que son mejores que sus vecinos, porque son estrictamente más altos que su media aritmética.

Los vecinos se definen de la siguiente manera:

  • Si el entero está en el índice 0 (el primero), sus vecinos son el último y el segundo elemento de la lista.

  • Si el número entero no es el primero ni el último, entonces sus vecinos son los dos elementos inmediatamente adyacentes.

  • Si el número entero está en el índice -1 (el último), entonces sus vecinos son el penúltimo y el primer elemento de la lista.


Tarea

Dado un conjunto de enteros, su tarea es descartar los narcisistas.

  • Los enteros pueden ser positivos, negativos o cero.

  • Puede suponer que la matriz contiene al menos tres elementos.

  • Se aplican todas las reglas estándar. Este es el , por lo que gana el código más corto en bytes.

Ejemplos

Considera la matriz [6, 9, 4, 10, 16, 18, 13]. Entonces podemos construir la siguiente tabla:

Elemento | Vecinos | Media de los vecinos | Es narcisista?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Falso.
9 | 6, 4 | 5 | Cierto.
4 | 9, 10 | 9,5 | Falso.
10 | 4, 16 | 10 | Falso.
16 10, 18 | 14 Cierto.
18 16,13 | 14,5 | Cierto.
13 18, 6 | 12 | Cierto.

Al filtrar los narcisistas, nos quedamos con [6, 4, 10]. ¡Y eso es!

Casos de prueba

Entrada -> Salida

[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 - Narcisista no significa matemáticamente narcisista .

Sr. Xcoder
fuente

Respuestas:

7

Jalea , 10 bytes

ṙ2+ṙ-<ḤCx@

Pruébalo en línea!

Explicación:

ṙ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)
Monja permeable
fuente
6

JavaScript (ES6), 57 56 bytes

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

Editar: Guardado 1 byte gracias a @ g00glen00b.

Neil
fuente
5

Mathematica, 44 bytes

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

Cómo funciona

Entrada dada como {11,6,9,10}, computa

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

y selecciona los elementos de la entrada original en lugares donde este resultado es como máximo 0.

Misha Lavrov
fuente
5

05AB1E , 22 17 15 14 bytes

vy¹®1‚N+èO;>‹—

Pruébalo en línea!

vy             # For each...
  ¹            # Push array.
   ®1‚         # Push [1,-1]
      N+       # Add current index.
        è      # Push surrounding values of current index.
         O;    # Summed in half.
           >‹  # A <= B?
             — # If true, print current.
Urna de pulpo mágico
fuente
1
Ahorre 1 byte con ʒ¹®1‚¾ + èO;> ‹¼
Emigna
4

Haskell , 51 bytes

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

Pruébalo en línea! Ejemplo de uso: f [1,2,3]rendimientos [1,2].

Para s = [1,2,3], last s:ses la lista [3,1,2,3]y tail$s++sla lista [2,3,1,2,3]. zip3genera una lista de triples (a,b,c)de tres listas dadas, truncando las más largas a la longitud de la lista más corta. Obtenemos [(3,1,2),(1,2,3),(2,3,1)], bsiendo el elemento original de la lista ay csus vecinos. La comprensión de la lista luego selecciona todos los blugares b*2<=a+c, es bdecir, no es narcisista.

Laikoni
fuente
4

Octava / MATLAB, 48 bytes

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

Pruébalo en línea!

Explicación

La matriz de entrada se extiende primero con las últimas ( x(end)) y primeras ( x(1)) entradas en los lados apropiados.

La prueba para el narcisismo se realiza convuniendo la matriz extendida con [1, -2, 1]y manteniendo solo la 'valid'parte.

La comparación de cada entrada en el resultado de convolución 0proporciona un índice lógico (máscara) que se utiliza para seleccionar los números de la entrada.

Luis Mendo
fuente
2

J , 16 bytes

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

Pruébalo en línea!

Explicación

#~+:<: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
millas
fuente
2

Japt , 17 16 15 bytes

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

Intentalo


Explicación

Entrada implícita de matriz U.

kÈ>

Elimine ( k) los elementos que devuelven verdadero cuando se pasa a través de una función, Ysiendo el índice actual, que verifican si el elemento actual es mayor que ...

[Y°ÉY]

La matriz [Y-1, Y+1]...

x!gU

Reducido por la suma ( x) después de indexar cada elemento en U...

½*

Multiplicado por .5.


Alternativa, 15 bytes

fÈ+X§UgYÉ +UgYÄ

Intentalo

Lanudo
fuente
2

R , 51 56 bytes

Gracias a user2390246 por corregir mi algoritmo

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

Pruébalo en línea!

índices ldonde c(l[-1],l[1])+c(l[s],l[-s]), las sumas vecinas de l, no son menos de dos veces l.

Giuseppe
fuente
2

Mathematica, 40 bytes

Pick[#,+##>=3#2&@@@Partition[#,3,1,-2]]&
JungHwan Min
fuente
Creo que necesitas en <=lugar de <.
Martin Ender
En realidad no, lo necesitarás >=.
Martin Ender
@ MartinEnder Ah, tienes razón. Tengo que Picknúmeros no narcisistas.
JungHwan Min
1

Python 2 , 64 60 bytes

  • Guardado cuatro bytes gracias a xnor ; golf l[-~j%len(l)](y un espacio) para (l+l)[-~j].
lambda l:[k for j,k in enumerate(l)if(l+l)[-~j]+l[~-j]>=k+k]

Pruébalo en línea!

Jonathan Frech
fuente
1

Java 8, 141 137 127 bytes

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 bytes gracias a @Nevay .

Explicación:

Pruébalo aquí.

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
Kevin Cruijssen
fuente
0

JavaScript ES5, 59 bytes

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])

DanielIndie
fuente
0

PowerShell , 75 bytes

for($i=0;$i-lt$a.Length;$i++){if($a[$i]-le(($a[$i-1]+$a[$i+1])/2)){$a[$i]}}
iluminado
fuente