Kreuzungssequenzen
A
Nennen Sie eine Liste positiver Ganzzahlen eine aufsteigende Folge, wenn jedes Element größer oder gleich dem vorherigen ist. und nenne es eine abnehmende Sequenz, wenn jedes Element kleiner oder gleich dem vorherigen ist.
Einige zunehmende Sequenzen:
[1,2,4,7]
[3,4,4,5]
[2,2,2]
[]
Einige abnehmende Sequenzen:
[7,4,2,1]
[5,4,4,3]
[2,2,2]
[]
Eine Kreuzungssequenz ist eine Liste, die in zwei disjunkte Teilsequenzen zerlegt werden kann, eine eine zunehmende Sequenz und die andere eine abnehmende Sequenz.
Zum Beispiel die Liste:
[3,5,2,4,1]
ist eine Kreuzungssequenz, da sie zerlegt werden kann in:
[3, 4 ]
[ 5,2, 1]
wo [3,4]
ist die zunehmende Teilsequenz und [5,2,1]
ist die abnehmende Teilsequenz. Wir werden ein solches Paar von (zunehmenden, abnehmenden) Teilsequenzen eine Zerlegung der Kreuzungssequenz nennen.
Die Liste:
[4,5,2,1,3]
ist keine Kreuzungssequenz; Es gibt keine Möglichkeit, es in eine zunehmende und abnehmende Teilfolge zu zerlegen.
Ihre Aufgabe ist es, ein Programm / eine Funktion zu schreiben, die eine Liste positiver Ganzzahlen als Eingabe verwendet. und wenn es sich um eine Kreuzungssequenz handelt, geben Sie die beiden Listen in einer ihrer Zerlegungen zurück; oder ein konsistenter "Falsey" -Wert, wenn die Liste keine Kreuzungssequenz ist.
Das ist Code-Golf ; Das kürzeste Programm / die kürzeste Funktion in jeder Sprache ist der Gewinner.
Regeln:
- Die Eingabe ist flexibel.
- Die üblichen Lücken sind verboten.
- Wenn es mehrere gültige Möglichkeiten gibt, die Eingabe zu zerlegen, können Sie eine oder alle ausgeben.
- Die Ausgabeformatierung für die Zerlegung ist flexibel. es muss jedoch hinsichtlich der Unterscheidung zwischen den beiden Teilsequenzen eindeutig sein.
- Sie können einen beliebigen konsistenten Ausgabewert verwenden, um anzuzeigen, dass die Eingabe keine Kreuzungssequenz ist. solange es im Vergleich zur Ausgabe für eine Kreuzungssequenz eindeutig ist. Sie sollten den Falsey-Wert in Ihrer Antwort angeben.
Testfälle:
Verwenden False
, um nicht kreuzende Sequenzen anzuzeigen:
[3, 5, 2, 4, 1] => [3, 4], [5, 2, 1]
[3, 5, 2, 4, 4, 1, 1] => [3, 4, 4], [5, 2, 1, 1]
[7, 9, 8, 8, 6, 11] => [7, 8, 8, 11], [9, 6]
[7, 9, 8, 8, 6, 11] => [7, 9, 11], [8, 8, 6] # also valid
[7, 9, 8, 8, 6, 11] => [7, 8, 11], [9, 8, 6] # also valid
[7, 8, 9, 10, 20, 30] => [7, 8, 9, 20, 30], [10]
[7, 8, 9, 10, 20, 30] => [8, 9, 10, 20, 30], [7] # this is also valid
[5, 5, 5] => [5, 5, 5], []
[4, 5, 2, 1, 3] => False
[3, 4, 3, 4, 5, 2, 4] => False
quelle
[3, 5, 2, 4, 4, 1, 1]
. Mit den aktuellen Testfällen können Sie mit>=
/ davonkommen<
, wenn es wirklich>=
/ sein sollte<=
.Antworten:
05AB1E ,
151413 BytesProbieren Sie es online aus oder validieren Sie alle Testfälle .
Erläuterung:
quelle
Gelee , 12 Bytes
Probieren Sie es online aus!
quelle
JavaScript (ES6),
110 105104 Byte[[decreasing], [increasing]]
Probieren Sie es online aus!
Wie?
some()
quelle
Haskell, 84 Bytes
Gibt eine Liste aller gültigen
(decreasing,increasing)
Paare oder die leere Liste zurück, wenn es kein solches Paar gibt.Probieren Sie es online aus!
quelle
Python 3 ,
109107 BytesProbieren Sie es online aus!
Die Funktion druckt alle möglichen Zerlegungen in die Standardausgabe. Wenn keine möglichen Zerlegungen möglich sind, wird nichts gedruckt.
Vielen Dank an @Sriotchilism O'Zaic für Verbesserungsvorschläge.
quelle
s<i[-1]
eher alsi[-1]>s
und ähnlich zu tund[-1]<s
, beide speichern ein Byte.Brachylog , 17 Bytes
Probieren Sie es online aus!
Es gibt wahrscheinlich viel Platz zum Golfen.
quelle
Python 2 , 147 Bytes
Probieren Sie es online aus!
quelle