... aber hey, keine Notwendigkeit, streng zu sein.
Bestimmen Sie bei einem nicht leeren Array von streng positiven Ganzzahlen, ob es sich um Folgendes handelt:
- Monoton streng abnehmend . Dies bedeutet, dass jeder Eintrag kleiner ist als der vorherige.
- Monoton nicht steigend, aber nicht streng fallend . Dies bedeutet, dass jeder Eintrag kleiner oder gleich dem vorhergehenden ist und das Array nicht in die obige Kategorie fällt.
- Nichts von alledem .
Beachten Sie die folgenden Eckfälle:
- Ein Array mit einer einzelnen Zahl ist monoton und nimmt streng ab (vakuus).
- Ein Array mit der gleichen Anzahl von Wiederholungen ist monoton, nicht ansteigend, aber nicht streng absteigend.
Regeln
Sie können ein Programm oder eine Funktion bereitstellen
Die Eingabe kann in jedem vernünftigen Format erfolgen: Array, Liste, Zeichenfolge mit durch Leerzeichen getrennten Zahlen, ...
Sie können jeweils drei konsistente Ausgaben für die drei Kategorien auswählen. Zum Beispiel können die Ausgänge Zahlen sein 0
, 1
, 2
; oder Strings 1 1
, 1 0
, leeren String.
Kürzester Code in Bytes gewinnt
Testfälle
Monoton streng abnehmend:
7 5 4 3 1
42 41
5
Monoton nicht steigend, aber nicht streng fallend:
27 19 19 10 3
6 4 2 2 2
9 9 9 9
Nichts des oben Genannten:
1 2 3 2
10 9 8 7 12
4 6 4 4 2
Antworten:
Jelly ,
10 95 Bytes-Methode von DrMcMoylex gefunden, geben Sie etwas Anerkennung!
TryItOnline! oder führen Sie alle Tests durch
Rückgabe:
-1
= monoton streng abnehmend;0
= monoton nicht ansteigend;1
= andere.Wie?
quelle
M
Zeichen Teil einer 8-Bit-Zeichentabelle? Sie können nicht sagen, dass es 5 Bytes sind, weil es nicht ist. CP1252 hat es zum Beispiel nicht.byte
in der Kopfzeile dieses Beitrags verknüpft sind .Perl 6 , 17 Bytes
2
1
0
Erweitert:
quelle
>
mitafter
und>=
mit gewechselt wurde!before
.say {[after](@_)+[!before] @_}(<d c b a>) #=> 2
MATL ,
10, 7 BytesProbieren Sie es online! oder überprüfe alle Testfälle!
3 Bytes gespart, dank @LuisMendo!
Die Ausgänge sind
Streng abnehmend: -1
Nicht steigend: 0
Sonstiges: 1
Erläuterung:
quelle
0
anstatt das letzte Plus voranzustellen1
? So etwas wie0hdX>ZS
0hdX>0/
Folgendes verwenden: - Frage an Sie und @LuisMendo: Ist es möglich, die Tatsache zu nutzen, dass sort nur 1 Zeichen (im Gegensatz zuX>
) ist, indem Sie implizit den letzten Wert verwenden?S
, aber ich habe keinen Weg gefunden, um es kürzer zu machen ...Mathematica, 22 Bytes
Unbenannte Funktion, die eine Liste von Zahlen als Eingabe verwendet. Gibt zurück,
-1
wenn die Liste stark abnimmt,0
nicht zunimmt, aber nicht stark abnimmt und1
keine.Ziemlich einfacher Algorithmus: Nimm die Differenzen von aufeinanderfolgenden Paaren, nimm das größte und nimm das Vorzeichen des größten.
(Ich glaube, es muss eine Sprache geben, in der dieser Algorithmus 3 Bytes lang ist ....)
In Bezug auf ein Array mit einem einzelnen Eintrag:
Differences
ergibt eine leere Liste;Max
von einer leeren Liste gibt-∞
(!); undSign[-∞]
wertet aus-1
(!!). Also funktioniert es tatsächlich bei diesem Eckfall. Muss Mathematica manchmal lieben. (Tatsächlich kennzeichnet die Funktion eine leere Liste auch korrekt als streng absteigend.)quelle
Haskell,
403837 BytesKehrt zurück
GT
für Monotone streng abnehmendEQ
für monoton nicht ansteigendLT
sonstcompare
vergleicht zwei Zahlen und gibtGT
(EQ
,LT
) zurück , wenn die erste Zahl größer als (gleich, kleiner als) die zweite Zahl ist.zipWith compare<*>tail
vergleicht Nachbarelemente.foldl min GT
reduziert die Liste der Vergleichsergebnisse mit der min - Funktion mit GT starten (Anmerkung:LT
<EQ
<GT
).Edit: @xnor
23 Bytes gefunden. Vielen Dank!quelle
GT
, weil wir das Minimum der Liste brauchen (ich hatte ein Maximum, was falsch war und ein Relikt aus einer frühen Version, in der ich=<<
stattdessen verwendet habe<*>
).foldl min GT
?Common Lisp,
4340 BytesDies nimmt die Eingabe als Lisp - Liste und kehrt
(T T)
,(NIL T)
und(NIL NIL)
die drei Kategorien zu unterscheiden. Hier läuft es auf den mitgelieferten Testfällen:quelle
(defun f(x)(mapcar'apply'(> >=)`(,x,x)))
. Beachten Sie, dass Sie nur schreiben können(lambda(x)...)
, um kürzer zu sein.Python 2, 30 Bytes
-1
für streng abnehmend,0
für schwach abnehmend,+1
für nicht abnehmendVerwenden Sie
cmp
, um aufeinanderfolgende Elemente zu vergleichen, und nimmt das Maximum an. Dies erfolgt durch Entfernen des ersten Elements einer Kopie der Liste und anschließendes Zuordnencmp
. Zum Beispiell=[2,2,1]
gibtdie
max
0 hat, weil eine Gleichheit besteht.Die kürzere Liste wird automatisch mit erweitert
None
, was weniger ist als alle Nummern und somit harmlos. Dieses Phantomelement schützt auch vor dem Aufnehmenmin
einer leeren Liste, wenn der Eingang die Länge 1 hat.quelle
Brachylog , 7 Bytes
Probieren Sie es online!
Dies druckt
1
zum strikten Verringern,0
zum Nichterhöhen und auffalse.
andere Weise.Erläuterung
Andere 7-Byte-Lösungen
quelle
R, 44 Bytes
Liest die Eingabe von stdin und gibt abhängig von der Eingabe Folgendes aus:
Ausgabe:
[1] FALSE TRUE
: Monoton, nicht ansteigend[1] TRUE FALSE
: Monoton streng abnehmend[1] FALSE FALSE
: Nichts des oben Genanntenquelle
d=diff(scan());ifelse(all(d<=0),!prod(d),2)
ist 1 Byte kürzer. Es gibt 0 zurück, wenn es streng monoton ist, 1, wenn es nicht monoton ist und 2, wenn keines der oben genannten Merkmale vorliegt. Nicht sicher, ob es erlaubt ist, nichts zurückzugeben, wenn keines der oben genannten, aber Sie könnten es weiter vereinfachend=diff(scan());if(all(d<=0))!prod(d)
.d=diff(scan());if(all(d<=0))any(!d)
ein Byte besser.JavaScript (ES6), 51 Byte
Liefert 0 für striktes Verringern, 1 für nicht steigendes, 2 andernfalls.
quelle
05AB1E ,
58 BytesFehler behoben von Emigna, danke! Es verwendet die gleiche Methode wie DrMcMoylex .
Probieren Sie es online!
Ausgabe ist:
quelle
®¸ì¥Z0.S
würde das einzelne Element Problem beheben.Ruby, 37 Bytes
Ausgang:
[true,true]
,[true,false]
oder[false,false]
quelle
Mathematica,
1511 BytesDies ist eine variable Funktion, bei der alle Eingabe-Ganzzahlen als separate Argumente verwendet werden.
True | True
False | True
False | False
Beachten Sie, dass dies
|
nichtOr
butAlternatives
ist. Dies ist Teil der Pattern-Matching-Syntax. Dies erklärt, warum diese Ausdrücke nicht ausgewertetTrue
werdenTrue
.False
, respectively.Der Code selbst ist meist eine Anwendung dieses Tipps . Zum Beispiel
##>0
wirdGreater[##, 0]
dann aber##
auf alle Eingabewerte erweitert, so dass wir so etwas wie bekommenGreater[5, 3, 2, 0]
, was selbst bedeutet5>3>2>0
.quelle
Schläger , 44 Bytes
Aufgerufen:
Ergebnis:
quelle
>
als wahr definiert. Common Lisp macht das richtig, definiert aber nicht den Fall arity 0 (was auch wahr sein sollte).C ++ 14, 85 Bytes
Gibt 3 (0b11) für das strikte Verringern, 1 (0b01) für das Nichterhöhen und 0 ansonsten zurück.
Ungolfed:
Ich dachte, dies sei ein perfektes Problem für die Folding-Ausdrücke von C ++ 17:
Leider verkettet es die Vergleichsoperatoren nicht, tut es aber
was nicht gewollt war.
quelle
Python 2,
6174 Bytes+13 Bytes für die Eingabe einer einzelnen Zahl
Benötigt Eingabe in Klammerlistenform wie
[3,2,1]
. Gibt 2 für das strikte Verringern, 1 für das Nichterhöhen und 0 ansonsten zurück.Alte Lösung:
quelle
Python 3,
8152 Bytes (Dank an FryAmTheEggMan )Probieren Sie es online!
quelle
sorted(s)[::-1]
ist kürzer zum Umkehren einer sortierten Liste. In Python 3 können Sie{*a}
eine Reihe von Elementen von abrufena
.sorted
Gibt eine Liste zurück, sodass Sie den Satz auch nicht in eine Liste umwandeln müssen. Auch das Hinzufügen von Booleschen Werten ist absolut koscher! Schließlich können Sie ein anonymes Lambda einreichen, das Sie also nicht benötigenf=
. Ich bekomme am Ende 52 Bytes. repl.it/E7eG/2Befunge, 50 Bytes
Probieren Sie es online!
Akzeptiert Eingaben als eine durch Leerzeichen getrennte Folge von int und gibt 0 zurück, wenn sie streng abnehmen, 1, wenn sie nicht streng abnehmen, 2, sonst.
Da das Lesen von Befunge unmöglich ist, wenn Sie die Sprache nicht kennen, ist dies der Algorithmus im Pseudocode:
* im befunge Speicher ist ein Stapel, der mit einer unendlichen Menge von 0 beginnt. pop (), push (x), input () und output (x) sind selbsterklärend, die anderen verwendeten Pseudofunktionen funktionieren so:
Funge!
Vorherige Version, nur 41 Byte, aber ungültig, da zum Beenden der Eingabesequenz eine 0 erforderlich ist (oder ein Interpreter wie dieser verwendet wird )
Probieren Sie es online!
quelle
0
zählt nicht als gültiges Eingabeformat. Ich denke, es fällt unter die Kategorie "vorverarbeitete Eingabe". Tatsächlich hängen einige Antworten ein0
im Code an (also auch das in der Byteanzahl). Ich wäre akzeptabel, wenn Sie könnten Können Sie das0
durch ein nicht numerisches Zeichen ersetzen ? Das wäre akzeptabel0
eingefügtes verwendet , um den Fall zu behandeln, dass die Eingabe nur einen Eintrag enthält. Das ist einer der Gründe, warum ich der Meinung bin, dass0
die Eingabe nicht gültig ist. Wie auch immer, wenn ein Dolmetscher ist , dass es nicht braucht, können Sie diesen Interpreter zu beweisen , dass Ihre Antwort ohne die gültige ist0
. Wenn der Try-it-Online-Dolmetscher dies benötigt,0
können Sie es zu Demonstrationszwecken mit einer entsprechenden Erläuterung hinzufügenJ, 14 Bytes
Monadisches Verb, das die Liste auf der rechten Seite aufnimmt und zurückkehrt,
1
um streng zu verringern,0
schwach zu verringern und auf_1
andere Weise.Nimmt das Vorzeichen
*
des Minimums<./
aufeinanderfolgender Unterschiede2-/\
der Liste. J vertauscht die Reihenfolge der Differenzen nicht, wenn sie genommen werden, so dass z. B. die Reihenfolge streng abnimmt, wenn diese alle positiv sind. Gibt insbesondere bei<./
Listen mit Nullelementen eine positive Unendlichkeit zurück.Im Einsatz bei der REPL:
quelle
C
6867 BytesEine Funktion
f
, der ein Array von ints (l
) übergeben wird, dem die Länge (n
auch ein int) vorausgeht . Gibt 3 zurück, wenn die Monotonie stark abnimmt, 1, wenn die Monotonie nicht zunimmt, aber nicht stark abnimmt, andernfalls 0.Aus Gründen der Lesbarkeit leicht ungespielt:
Neu angeordnet und kommentiert, um die Logik zu zeigen:
Testfälle (mit freundlicher Genehmigung von IDEOne ):
quelle
Retina , 41 Bytes
Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
2
3
1
Erläuterung
Konvertiert die Eingabe unär.
Der reguläre Ausdruck entspricht hier einem zunehmenden Paar aufeinanderfolgender Zahlen. Wenn dies der Fall ist, kann der Eingang eindeutig nicht nicht ansteigend sein. Die
A
bezeichnet er als ein „anti-grep“ -Stufe was bedeutet , dass die Eingangsleitung verworfen wird und mit dem leeren String , wenn die Regex Einstimmungen ersetzt.Dies ist eine geteilte Stufe, mit der ein Zeilenvorschub nur dann an den Eingang angehängt wird, wenn der Eingang nicht verworfen wurde. Wir haben also zwei mögliche Ergebnisse: Nicht ansteigende Eingaben erhalten am Ende einen Zeilenvorschub und andere sind noch leer.
Schließlich zählen wir die Anzahl der Übereinstimmungen dieses regulären Ausdrucks. Der reguläre Ausdruck stimmt entweder mit identischen Zahlen überein (und dann alles bis zum Ende der Zeichenfolge, um mehrfache Übereinstimmungen dieser Art für Eingaben wie zu vermeiden
1 1 1 1
) oder mit dem "Ende der Eingabe". Lassen Sie uns die drei Arten von Eingaben durchgehen:$
Übereinstimmungen. Jetzt$
ist nicht genau "das Ende der Zeichenfolge". Es kann auch vor einem nachfolgenden Zeilenvorschub passen. Wir erhalten also tatsächlich zwei Übereinstimmungen, eine am Ende der Eingabe und eine nach dem Zeilenvorschub, den wir eingefügt haben.$
nur einmal übereinstimmt.quelle
Axiom, 114 Bytes
Ungolfed
Ergebnisse
quelle
APL, 16 Bytes
Hinweis: Geben Sie ein Elementarray wie z
a←1⍴3
ansonsten:a←4 3 2 1
Ausgabe interpretieren:
Idee: Testen Sie die Monotonie, indem Sie das Original mit dem sortierten Array vergleichen, und prüfen Sie, ob keine Erhöhung vorliegt, indem Sie das Array mit entfernten Duplikaten vergleichen.
(Und ich denke, es kann verbessert werden ...)
quelle
Haskell, 36 Bytes
(+x)
Das liegt daran, dass haskell nicht(-x)
als Abschnitt, sondern als Wert falsch interpretiert . Ich frage mich, ob der ganze Ausdruck gewinnbringend sinnlos gemacht werden kann.quelle
LabVIEW, 12 Knoten, 18 Drähte ==> 48 Bytes gemäß Konvention
Keine Funktionen in den anderen Gehäuserahmen verborgen, nur ein einziger Draht über.
quelle
Ceylon, 86 Bytes
Die Funktion nimmt die Eingabe als Parameter und gibt ein Tupel mit null oder einem Booleschen Wert zurück -
[false]
für Monotone, das streng abnimmt ,[true]
für Monotone, das nicht zunimmt, aber nicht streng abnimmt , und[]
für keines der oben genannten .Es kann so verwendet werden:
Ausgabe:
Eine ungolfed und kommentierte Version:
quelle
Clojure, 34 Bytes
Sehr einfach, kehrt zurück,
1
wenn sie streng abnimmt,2
wenn sie nicht zunimmt undnil
ansonsten.Auch versucht,
apply
mit Makros zu vermeiden ,~@
aber es ist nur länger bei 43 Zeichen (dies führt zu[1 2 nil]
):quelle
Pip , 8 Bytes
Volles Programm. Nimmt die Eingabeliste als Befehlszeilenargumente. Outputs
11
für streng abnehmende,01
für nicht ansteigende,00
für keine.Probieren Sie es online!
Erläuterung
Dieser Ansatz funktioniert, weil die Vergleichsoperatoren von Pip, wie die von Python, miteinander verkettet sind:
4>3>2
ist wahr und nicht(4>3)>2
(falsch) wie in C. Und dasselbe Verhalten gilt, wenn die Vergleichsoperatoren mit dem$
Fold-Metaoperator geändert werden.quelle
Japt ,
987 BytesAusgänge
-1
für "monoton streng abnehmend",0
für "monoton nicht inkrementierend" und1
sonst.Versuch es
1 Byte gespeichert, danke an Oliver .
quelle
än mg rw
liefert die falschen Ergebnisse ohne das,J
aber das ist bei nicht der Fallän rw g
. Seltsam.R , 34 Bytes
Probieren Sie es online!
Ports DJs MATL Antwort .
R , 43 Bytes
Probieren Sie es online!
Rückgabe
2
für streng abnehmend,1
für nicht steigend und0
sonst.all(x==cummin(x))
isTRUE
(konvertiert in,1
wenn es in der Arithmetik verwendet wird) nur dann, wennf
es nicht ansteigt, einschließlich der Groß- und Kleinschreibung.all(diff(x)<0)
istTRUE
nur, wennf
es streng abnimmt.quelle