Geben Sie bei einem Array positiver Ganzzahlen ein Array aller Elemente aus, die größer oder gleich den benachbarten sind. Die meisten Elemente haben zwei benachbarte Elemente. Das erste und das letzte Element sind Sonderfälle, da sie nur ein benachbartes Element haben.
Sie können davon ausgehen, dass das Array mindestens zwei Elemente enthält.
Testfälle:
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]
Das ist Code-Golf , der kürzeste Code gewinnt!
[4,3,3,4]
als Testfall vorschlagen . Meine Lösung hat das leider nicht so gut gelöst.Antworten:
Jelly ,
13 1211 BytesEin monadischer Link, der eine Liste positiver Ganzzahlen erstellt und die gefilterte Liste zurückgibt, die nur diejenigen enthält, die größer oder gleich allen Nachbarn sind.
Probieren Sie es online!
Vorherige 12 Byter :
Vorherige 13 Byter :
Wie?
quelle
»
- aber wie wäre es mit 10 ..?Python , 54 Bytes
Probieren Sie es online!
I / O ist eher mit Tupeln als mit Listen.
Python , 57 Bytes
Probieren Sie es online!
Alt 57:
quelle
Mathematica 22 Bytes
quelle
Haskell,
504942 BytesProbieren Sie es online!
scanr(:)[0]
stellt eine Liste von den Schwänzen(0:l)
, die jeweils mit einem letzten0
, beispielsweise fürl = [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]]
die agains Muster abgestimmt ist ,i:j:k:_
alle Listen zu extrahieren , mit mindestens 3 Elementen , die genannt werdeni
,j
undk
. Behalten Sie,j
wenn sein> =i
undj
.Edit: Ørjan Johansen hat 7 Bytes gespeichert. Vielen Dank!
quelle
i:j:k:_<-scanr(:)[0]$0:l
ist kürzer. (Den "Standard"tails=scanr(:)[]
-Trick leicht anpassen .)Dyalog APL,
3130282221 ByteProbieren Sie es online!
Erklärung (Ich kann Dinge nicht gut erklären):
quelle
Haskell , 40 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6), 40 Byte
quelle
Python 3 ,
84 75 *71 BytesProbieren Sie es online!
* @ LeakyNun sparte 9 Bytes mit einem cleveren Operator-Trick.
quelle
lambda l,k=[0]:[l[i]for i in range(len(l))if(k+l+k)[i+2]<=l[i]>=(k+l+k)[i]]
Gelee , 15 Bytes
Probieren Sie es online!
quelle
05AB1E ,
151413 BytesProbieren Sie es online!
Erläuterung
Vorherige 15-Byte-Lösung
Probieren Sie es online!
Erläuterung
quelle
R, 44 Bytes
was zur Funktion auswertet:
Verglichen
x
mitc(0,x)
, also mitx
einer Position nach rechts verschoben. Auch im Vergleichx
zux[-1]
, also eine Position nach links verschoben. Dies sind beide,TRUE
wenn es dort ein Maximum gibt.&
das UND dieser Booleschen zu nehmen. Wegen der Umhüllungsnatur der Vektoren von R, wenn sie nicht die gleiche Länge haben, müssen wir das Ergebnis um die Länge von kürzenx
, die durch take ermittelt wirdsum(x|1)
. Dann fügen wir den Booleschen Vektor ein, nehmen nur die wahren Indizes vonx
und geben diese zurück.Da diese logischen Operationen mit Vektoren ungleicher Länge durchgeführt werden, wird sich R beschweren. Viel. Die korrekte Ausgabe wird jedoch inmitten der Warnungen angezeigt:
quelle
R , 42 Bytes
Probieren Sie es online!
2 Bytes kürzer als die JAD-Lösung .
diff
berechnet aufeinanderfolgende Differenzen; Bewahren Sie dann nur die Einträge auf, die größer als beide Nachbarn sind.quelle
Pyth , 20 Bytes
Golfen ...
Testsuite.
quelle
R , 68 Bytes
Probieren Sie es online!
quelle
pryr::f(expression)
ist eine kürzere Möglichkeit, eine Funktion zu deklarieren alsfunction(a)expression
.sum(a|1)
ist eine Abkürzung fürlength(a)
.PHP , 67 Bytes
Probieren Sie es online!
quelle
Netzhaut , 51 Bytes
Probieren Sie es online aus
quelle
q, 39 Bytes
quelle
Stax , 10 Bytes
Führen Sie es aus und debuggen Sie es
Die Ausgabe erfolgt als durch Zeilenumbrüche getrennte Werte in der Standardausgabe.
Ausgepackt, ungolfed und kommentiert sieht es so aus.
Führen Sie dieses aus
Aktualisiert: Ich habe gerade eine 9-Byte-Lösung gefunden. Wird die Erklärung später aktualisieren:
Stax , 9 Bytes
Führen Sie es aus und debuggen Sie es
quelle
Perl 5
-a
, 37 BytesProbieren Sie es online!
quelle