Narzisstische Array-Elemente

15

Definition

Narzisstische 1- Ganzzahlen eines Arrays denken, dass sie besser sind als ihre Nachbarn, weil sie streng höher sind als ihr arithmetisches Mittel.

Nachbarn sind wie folgt definiert:

  • Wenn sich die Ganzzahl auf dem Index 0 (dem ersten) befindet, sind die Nachbarn das letzte und das zweite Element der Liste.

  • Wenn die Ganzzahl weder die erste noch die letzte ist, sind ihre Nachbarn die beiden unmittelbar benachbarten Elemente.

  • Wenn die Ganzzahl den Index -1 (das letzte) hat, sind die Nachbarn das vorletzte und das erste Element der Liste.


Aufgabe

Bei einer Reihe von Ganzzahlen müssen Sie die narzisstischen verwerfen.

  • Die ganzen Zahlen können positiv, negativ oder null sein.

  • Sie können davon ausgehen, dass das Array mindestens drei Elemente enthält.

  • Es gelten alle Standardregeln. Das ist , also gewinnt der kürzeste Code in Bytes.

Beispiele

Betrachten Sie das Array [6, 9, 4, 10, 16, 18, 13]. Dann können wir die folgende Tabelle erstellen:

Element | Nachbarn | Mittelwert der Nachbarn Ist narzisstisch?
-------- + ------------ + ------------------ + --------- --------
6 | 13, 9 | 11 | Falsch.
9 | 6, 4 | 5 | Wahr.
4 | 9, 10 | 9,5 | Falsch.
10 | 4, 16 | 10 | Falsch.
16 | 10, 18 | 14 | Wahr.
18 | 16, 13 | 14,5 | Wahr.
13 | 18, 6 | 12 | Wahr.

Indem wir die narzisstischen herausfiltern, bleiben wir zurück [6, 4, 10]. Und das ist es!

Testfälle

Eingabe -> Ausgabe

[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 - Narzisstisch bedeutet nicht mathematisch narzisstisch .

Mr. Xcoder
quelle

Antworten:

7

Gelee , 10 Bytes

ṙ2+ṙ-<ḤCx@

Probieren Sie es online!

Erläuterung:

ṙ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)
Undichte Nonne
quelle
6

JavaScript (ES6), 57 56 Bytes

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

Bearbeiten: 1 Byte dank @ g00glen00b gespeichert.

Neil
quelle
5

Mathematica, 44 Bytes

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

Wie es funktioniert

Bei Eingabe wie {11,6,9,10}, rechnet

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

und wählt die Elemente der ursprünglichen Eingabe an Stellen aus, an denen dieses Ergebnis höchstens 0 ist.

Mischa Lawrow
quelle
5

05AB1E , 22 17 15 14 Bytes

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

Probieren Sie es online!

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.
Magische Kraken-Urne
quelle
1
Speichern Sie 1 Byte mit ¹®1‚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]

Probieren Sie es online! Anwendungsbeispiel: f [1,2,3]Erträge [1,2].

Für s = [1,2,3], last s:sist die Liste [3,1,2,3]und tail$s++sdie Liste [2,3,1,2,3]. zip3generiert eine Liste von Tripeln (a,b,c)aus drei gegebenen Listen, wobei die längeren auf die Länge der kürzesten Liste gekürzt werden. Wir bekommen [(3,1,2),(1,2,3),(2,3,1)], mit bdem ursprünglichen Listenelement aund cseinen Nachbarn. Das Listenverständnis wählt dann alle aus, bwo b*2<=a+cdas bnicht narzisstisch ist.

Laikoni
quelle
4

Oktave / MATLAB, 48 Bytes

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

Probieren Sie es online!

Erläuterung

Das Eingabearray wird zuerst mit den letzten ( x(end)) und ersten ( x(1)) Einträgen an den entsprechenden Seiten erweitert.

Der Test auf Narzissmus wird durchgeführt, indem convdas erweiterte Array mit [1, -2, 1]nur dem 'valid'Teil zusammengehalten wird.

Der Vergleich jedes Eintrags im Faltungsergebnis mit 0ergibt einen logischen Index (Maske), mit dem die Zahlen aus der Eingabe ausgewählt werden.

Luis Mendo
quelle
2

J , 16 Bytes

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

Probieren Sie es online!

Erläuterung

#~+:<: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
Meilen
quelle
2

Japt , 17 16 15 Bytes

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

Versuch es


Erläuterung

Implizite Eingabe eines Arrays U.

kÈ>

Entfernen Sie ( k) die Elemente, die beim Durchlaufen einer Funktion true zurückgeben. Dabei handelt Yes sich um den aktuellen Index, der überprüft, ob das aktuelle Element größer ist als ...

[Y°ÉY]

Das Array [Y-1, Y+1]...

x!gU

Reduziert durch Addition ( x) nach Indizierung jedes Elements in U...

½*

Multipliziert mit .5.


Alternative, 15 Bytes

fÈ+X§UgYÉ +UgYÄ

Versuch es

Zottelig
quelle
2

R , 51 56 Bytes

Vielen Dank an user2390246 für die Korrektur meines Algorithmus

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

Probieren Sie es online!

Indizes, bei ldenen c(l[-1],l[1])+c(l[s],l[-s])die Nachbarsummen lnicht weniger als das Doppelte betragen l.

Giuseppe
quelle
2

Mathematica, 40 Bytes

Pick[#,+##>=3#2&@@@Partition[#,3,1,-2]]&
JungHwan min
quelle
Ich denke du brauchst <=statt <.
Martin Ender
Eigentlich nein, du wirst brauchen >=.
Martin Ender
@ MartinEnder Ah, du hast recht. Ich muss Picknicht narzisstisch zahlen.
JungHwan Min
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 dank @Nevay .

Erläuterung:

Probieren Sie es hier aus.

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

DanielIndie
quelle
0

PowerShell , 75 Byte

for($i=0;$i-lt$a.Length;$i++){if($a[$i]-le(($a[$i-1]+$a[$i+1])/2)){$a[$i]}}
zündete
quelle