Matrice narcisistica


15

Definizione

Gli interi 1 narcisistici di un array pensano di essere migliori dei loro vicini, perché sono rigorosamente più alti della loro media aritmetica.

I vicini sono definiti come segue:

  • Se l'intero è all'indice 0 (il primo), i suoi vicini sono l'ultimo e il secondo elemento dell'elenco.

  • Se il numero intero non è il primo né l'ultimo, i suoi vicini sono i due elementi immediatamente adiacenti.

  • Se l'intero è all'indice -1 (l'ultimo), i suoi vicini sono il penultimo e il primo elemento dell'elenco.


Compito

Data una serie di numeri interi, il tuo compito è scartare quelli narcisistici.

  • I numeri interi possono essere positivi, negativi o zero.

  • Si può presumere che l'array contenga almeno tre elementi.

  • Si applicano tutte le regole standard. Questo è , quindi vince il codice più breve in byte.

Esempi

Considera l'array [6, 9, 4, 10, 16, 18, 13]. Quindi possiamo creare la seguente tabella:

Elemento | Vicini | Media dei vicini | È narcisista?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Falso.
9 | 6, 4 | 5 | Vero.
4 | 9, 10 | 9.5 | Falso.
10 | 4, 16 | 10 | Falso.
16 | 10, 18 | 14 | Vero.
18 | 16, 13 | 14.5 | Vero.
13 | 18, 6 | 12 | Vero.

Filtrando quelli narcisistici, ci rimane [6, 4, 10]. E questo è tutto!

Casi test

Ingresso -> Uscita

[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 non significa matematicamente narcisista .

Risposte:


7

Gelatina , 10 byte

ṙ2+ṙ-<ḤCx@

Provalo online!

Spiegazione:

ṙ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 byte

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

Modifica: salvato 1 byte grazie a @ g00glen00b.


5

Mathematica, 44 byte

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

Come funziona

Dato input come {11,6,9,10}, calcola

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

e seleziona gli elementi dell'input originale nei punti in cui questo risultato è al massimo 0.



4

Haskell , 51 byte

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

Provalo online! Esempio di utilizzo: f [1,2,3]rese [1,2].

Per s = [1,2,3], last s:sè l'elenco [3,1,2,3]e tail$s++sl'elenco [2,3,1,2,3]. zip3genera un elenco di triple (a,b,c)da tre elenchi dati, troncando quelli più lunghi alla lunghezza dell'elenco più breve. Otteniamo [(3,1,2),(1,2,3),(2,3,1)], bessendo l'elemento elenco originale ae i csuoi vicini. La comprensione della lista quindi seleziona tutto bdove b*2<=a+c, cioè bnon è narcisistico.


4

Octave / MATLAB, 48 byte

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

Provalo online!

Spiegazione

L'array di input viene prima esteso con le voci last ( x(end)) e first ( x(1)) ai lati appropriati.

Il test per il narcisismo viene eseguito convolving l'array esteso [1, -2, 1]e mantenendo solo la 'valid'parte.

Confrontando ciascuna voce nel risultato della convoluzione con si 0ottiene un indice logico (maschera) che viene utilizzato per selezionare i numeri dall'input.


2

J , 16 byte

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

Provalo online!

Spiegazione

#~+:<: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 byte

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

Provalo


Spiegazione

Input implicito di array U.

kÈ>

Rimuovi ( k) gli elementi che restituiscono true quando vengono passati attraverso una funzione, con Yl'indice corrente, che controllano se l'elemento corrente è maggiore quindi ...

[Y°ÉY]

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

x!gU

Ridotto da addizione ( x) dopo aver indicizzato ogni elemento in U...

½*

Moltiplicato per .5.


Alternativa, 15 byte

fÈ+X§UgYÉ +UgYÄ

Provalo


2

R , 51 56 byte

Grazie a user2390246 per aver corretto il mio algoritmo

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

Provalo online!

indici in lcui c(l[-1],l[1])+c(l[s],l[-s])le somme vicine di lnon sono meno di due volte l.





1

Java 8, 141 137 127 byte

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 byte grazie a @Nevay .

Spiegazione:

Provalo qui.

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 byte

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




Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.