Bestimmen Sie anhand einer Liste positiver Ganzzahlen, ob es ein Element gibt, das entweder größer als seine zwei Nachbarn oder kleiner als seine zwei Nachbarn ist (ein "Stoß"). Um klar zu sein, kann eine Erhebung niemals das erste oder letzte Element der Liste sein, da sie nur einen Nachbarn hat.
Ihr Programm sollte einen von zwei konsistenten Werten ausgeben, die entweder einer Liste ohne Unebenheiten oder einer Liste mit Unebenheiten entsprechen. Was die Werte sind, ist unwichtig. Sie können sie selbst auswählen.
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
[] -> False
[1] -> False
[1,2] -> False
[1,2,1] -> True
[1,2,2] -> False
[1,2,3] -> False
[1,2,2,1] -> False
[1,2,2,3] -> False
[1,2,1,2] -> True
[1,3,2] -> True
[3,1,2] -> True
[2,2,2] -> False
code-golf
number
array-manipulation
decision-problem
Weizen-Assistent
quelle
quelle
[1,3,3]
([1,2,2]
? Oder vermisse ich etwas?[1,2,2]
sind die gleichen wie die Zeichen dieser Deltas, aber das ist bei nicht der Fall[1,3,3]
.Antworten:
Gelee , 5 Bytes
Gibt 0 zurück, wenn eine Unebenheit vorliegt, 1, wenn nicht.
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 38 Byte
Gibt einen Booleschen Wert zurück.
Testfälle
Code-Snippet anzeigen
Wie?
Wir verwenden a , um den vorherigen Wert von n zu speichern . Wir setzen x auf 1, wenn a <n , -1, wenn a> n oder 0, wenn a = n . Und wir testen, ob old_x * x <0 ist , was nur möglich ist, wenn ( old_x = 1 und x = -1 ) oder ( old_x = -1 und x = 1 ).
Da x mit der anonymen Rückruffunktion von some () initialisiert wird , wird es während der ersten Iteration zu NaN gezwungen , wodurch der Test falsch wird.
quelle
Haskell , 42 Bytes
Probieren Sie es online!
Erläuterung
Zuerst haben wir die Funktion
f
, die eine Binärfunktion und eine Liste annimmt und die Binärfunktion auf jedes benachbarte Paar in der Liste anwendet.Dann gilt unsere Hauptfunktion für
f(-)
die Eingabeliste. Dies berechnet die Differenzliste. Wir wenden dannf(*)
auf die Liste an, um jedes benachbarte Paar zu multiplizieren. Zuletzt fragen wir, ob ein Paar kleiner als Null ist.Eine Zahl in der Endeliste kann nur negativ sein, wenn sie das Produkt einer negativen und positiven Zahl aus der Differenzliste ist. Um also einen negativen Eintrag zu erzeugen (und dann true zurückzugeben), muss die ursprüngliche Liste von aufsteigend auf absteigend umgeschaltet werden oder umgekehrt, das heißt, sie muss eine Unebenheit aufweisen.
quelle
Python 2 , 43 Bytes
Gibt True zurück, wenn es eine Beule gibt, Fehler, wenn es keine gibt. ( standardmäßig erlaubt )
Probieren Sie es online!
quelle
Oktave mit Bildpaket,
3432 Bytes2 Bytes gespart dank @StewieGriffin !
Probieren Sie es online!
Erläuterung
Berechnet aufeinanderfolgende Differenzen, ordnet sie in Gleitblöcken der Länge 2 an, ermittelt das Produkt jedes Blocks und prüft, ob ein solches Produkt negativ ist.
quelle
0||prod(...)
Spart 2 Bytes. Sie können auch den gesamtenany
Teil überspringen und die Standard-Wahrheits- / Falschdefinition verwenden, um 5 Bytes zu sparen .any
. Danke für die0||
Idee!R, 48 Bytes
Probieren Sie es online!
So geht es Schritt für Schritt am Beispiel von c (1,4,1,4):
Als Bonus gibt es hier eine Lösung von ähnlicher Länge und Konzept mit Paket
zoo
:quelle
embed
existiert. Es ist schade , dassrowProds
undcolProds
existiert nicht als Aliase in R.rowSums
undrowMeans
....colSums
wird die Eingabe in eine Matrix umgewandelt, die auf zusätzlichen Eingaben basiert, die wahrscheinlich irgendwo eine Golfanwendung haben. Jetzt muss ich nur noch eine finden!matrixStats
Paket an.function(x)any(matrixStats::colProds(embed(diff(x),2)))<0
. Aber für alles andere als Code-Golf ist dieses Paket in der Tat eine Fundgrube.Haskell , 33 Bytes
Probieren Sie es online!
True
Wenn es eine Beule gibt, Fehler, wenn es keine gibt.quelle
l`zip3`tail l$drop 2l
ist nur ein Haar kürzer. Ich frage mich, ob Pattern Matching irgendwie noch kürzer ist?Perl 6 , 39 Bytes
Probieren Sie es online!
$_
ist das Listenargument für diese anonyme Funktion..[1..*]
ist die gleiche Liste, aber mit dem ersten Element gelöscht.Zcmp
Zippt die beiden Listen zusammen mit demcmp
Operator, wodurch eine Liste mitOrder
Werten erstellt wird. Bei einer Eingabeliste1, 2, 2, 2, 1
würde dies beispielsweise zu einer Liste führenMore, Same, Same, Less
.Jetzt müssen wir nur noch wissen, ob diese Liste zwei benachbarte Elemente enthält
More, Less
oderLess, More
. Der Trick, den ich verwendet habe, besteht darin, die Liste mit in eine durch Leerzeichen getrennte Zeichenfolge zu konvertieren~
und dann zu testen, ob sie entweder eine Teilzeichenfolgere L
oder eine Teilzeichenfolge enthälts M
. (Das erste kann nicht nur sein,e L
weil esSame
auch mit einem "e" endet.)Der Operator für intelligente Übereinstimmungen gibt entweder ein
Match
Objekt zurück (wenn die Übereinstimmung erfolgreich war) oderNil
(wenn dies nichtso
der Fall war). Er konvertiert also alles , was es ist, in einen booleschen Wert.quelle
Wolfram Language (Mathematica) , 40 Byte
Probieren Sie es online!
quelle
Ruby ,
5546 BytesProbieren Sie es online!
Ein Lambda, das ein Array akzeptiert und einen Booleschen Wert zurückgibt.
-9 Bytes: Ersetzen
(x<y&&y>z)||(x>y&&y<z)
durch(y-x)*(y-z)>0
(dank GolfWolf )quelle
|
anstelle von||
1 Byte sparen.PostgreSQL 173 Bytes
quelle
Java 8,
10810410186847972 Bytes-2 Bytes dank @ OlivierGrégoire .
-13 Bytes dank @Nevay .
Probieren Sie es online aus.
quelle
-1
.a->{int i=a.length;for(;i-->2;)i|=(a[i]-a[--i])*(a[i]-a[i-1])>>-1;return-~i|3;}
(Rückgabe-1
für wahrheitsgemäße Fälle,3
für falsche Fälle) - oder, wenn das Vorhandensein / Fehlen einer Ausnahme als Rückgabewert verwendet wird, 55 Bytes:a->{for(int i=0;++i>0;)i|=(a[i-1]-a[i])*(a[i]-a[i+1]);}
a->{int i=a.length,p=0;for(;i-->1;)i|=p*(p=a[i]-a[i-1])>>-1;return-i>1;}
R ,
5856 BytesProbieren Sie es online!
2 Bytes dank Giuseppe gespeichert
quelle
{}
für -2 Bytes loswerden .c()
istNULL
das, nicht die gleiche wie der leere Vektor von ganzen Zahlen istinteger(0)
, während in MATLAB[]
ist eindouble
standardmäßig, aber wenn man es auf diese Weise halten will, das ist durchaus sinnvoll .J ,
16-15Bytes-1 Byte dank FrownyFrog
Probieren Sie es online!
Original: 16 Bytes
2-/\]
- Unterschiede der jeweils benachbarten Gegenstände2*/\
- Produkte der jeweils angrenzenden Artikel[:<./
- das Minimum0>
- ist negativ?Probieren Sie es online!
quelle
f=.
. Bitte beachten Sie, dass ich relativ neuer Benutzer bin :)1 e.0>2*/\2-/\]
Japt , 11 Bytes
-5 Bytes dank @ETHproductions
Probieren Sie es online! | Testfälle
Dies verwendet Dennis ' Algorithmus
quelle
Japt , 9 Bytes
Probieren Sie es online!
Ein Mashup von Olivers Antwort mit dem Ansatz mehrerer anderer Antworten.
quelle
Attache , 39 Bytes
Probieren Sie es online!
Ziemlich zufrieden damit, wie sich das herausstellte.
Erläuterung
Dies ist eine Zusammensetzung von vier Funktionen:
Delta
Ruft die Unterschiede zwischen Elementen ab. =Dann
Sign
wird auf jeden Unterschied angewendet, wodurch wir ein Array von1
s,0
s und-1
s erhalten. =Slices&2
Geben Sie dann alle Slices der Länge zwei aus dem Array an und geben Sie alle Differenzenpaare an.Schließlich
Any&:&{_*~?Sum[__]}
ist äquivalent zu, für die Eingabex
:Dies sucht nach Elementen, die sich zu Null summieren, aber nicht Null sind. Wenn ein solches Elementpaar existiert, gibt es eine Unebenheit.
quelle
MATL , 8 Bytes
Probieren Sie es online!
quelle
Schale , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
Oktave , 33 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Brachylog , 10 Bytes
Probieren Sie es online!
Erfolgreich (
true.
), wenn es eine Beule gibt, und fehlgeschlagen ( ), wenn esfalse.
keine Beule gibt.Erläuterung
Das ist schon ziemlich lesbar:
quelle
05AB1E , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
0‹
die die Zahl grundsätzlich auf ein negatives Vorzeichen überprüft?d
verwendet, um zu überprüfen, ob nur die Oberseite des Stapels enthalten ist[0-9]
, was das Gegenteil von dem ist, was wir hier wollen. Aber jetzt ist es intelligenter und Negative / Floats werden ebenfalls als Zahlen gezählt.a
, dasnegative
Zeichen gesehen zu haben und zurückgekehrt zu sein oder so ... Aber ich denke du hast recht, ich erinnere mich an deinend
Trick.Brachylog , 10 Bytes
Probieren Sie es online!
Nicht annähernd so ordentlich und elegant wie die 10-Byte-Antwort von @ Fatalize, aber es funktioniert!
quelle
Schale , 9 Bytes
Probieren Sie es online!
Verwendet Dennis 'Algorithmus.
quelle
Perl 5 , 54 + 2 (
-pa
) = 56 BytesProbieren Sie es online!
quelle
Python 2 , 60 Bytes
Probieren Sie es online!
Ziemlich das Gleiche, dachte es wäre allerdings kürzer ...
Python 2 , 63 Bytes
Probieren Sie es online!
quelle
Pyt ,
117 BytesGibt 1 aus, wenn eine Erhebung vorliegt, andernfalls 0
Probieren Sie es online!
Port of Wheat Wizard's Haskell Antwort
Alter Weg (11 Bytes):
Probieren Sie es online!
Gibt False zurück, wenn eine Unebenheit vorliegt, andernfalls True
Port of Dennis 'Jelly Antwort
quelle
Wolfram Language (Mathematica) ,
37-36BytesGibt das Gegenteil der Testfallantworten (Falsch und Richtig umgekehrt). Stellen Sie a voran
!
, um zur normalen Form zu wechseln.ODER
Auch umgekehrt Ausgang, so ersetzen
FreeQ
mitMatchQ
für Normalform.Erklärung: Nehmen Sie das Vorzeichen der Unterschiede der Reihenfolge. Wenn die resultierende Sequenz {1, -1} oder {-1,1} enthält, gibt es eine Unebenheit. Der absolute Wert der Differenzen von {1, -1} oder {-1,1} ist in beiden Fällen 2.
Rasiere ein weiteres Byte ab, indem du die endgültige Liste quadrierst, anstatt den absoluten Wert zu nehmen:
Probieren Sie es online!
quelle
Perl, 35 Bytes
Beinhaltet
+3
für-p
bump.pl
:Rennen wie:
quelle
Julia 0,6 ,
5756 BytesGrundsätzlich nur totalhumans Python Antwort. -1 Byte von user71546
Probieren Sie es online!
Julia 0,6 , 39 Bytes
Lispy-Rekursionsstil, alias Dennis 'Python-Antwort. Gibt zurück,
true
wenn eine Beule vorhanden ist, andernfalls wird ein Fehler ausgegeben. Das sollten vielleicht 42 Bytes sein, da Sie es beim Aufruf aufteilen müssen. ZB füra=[1,2,1]
dich als anrufenf(a...)
.f(a)=f(a...)
würde diesen Bedarf beseitigen, ist aber länger. Ich muss eine Rekursion verbessern, und ich mag es nicht wirklich, Code zu schreiben, der einen Fehler auslöst.Probieren Sie es online!
quelle
for
ist nicht notwendig;)