Retina , 59-58 Bytes
+`(\D*)1(1*)
:$1<$2:$1>$2:$1_$2:
:(_|()<|(?<-2>)>)+:(?!\2)
Nimmt unäre Eingaben auf . Eingabe 7 (dh 1111111
) dauert eine Weile, ist aber noch in weniger als einer Minute abgeschlossen. Ich würde nicht viel weiter gehen.
Probieren Sie es online aus.
Erläuterung
Eine andere Charakterisierung der Motzkin-Zahlen ist die Anzahl der Saiten aus drei verschiedenen Zeichen, von denen zwei korrekt ausgeglichen sind (daher die enge Beziehung zu den katalanischen Zahlen, die ohne das dritte Zeichen, das unabhängig vom Ausgleich ist, identisch sind).
.NET die Bilanzgruppen sind ziemlich gut an richtig abgestimmt Saiten zu erfassen, so dass wir einfach erzeugen alle Strings der Länge N
(mit _
, <
und >
als die drei Zeichen) und dann wir zählen , wie viele von denen sind richtig ausgewogen. ZB für N = 4
die gültigen Zeichenfolgen sind:
____
__<>
_<_>
_<>_
<__>
<_>_
<>__
<<>>
<><>
Gegenüber der Definition in der Challenge _
entspricht dies einem (1,0)
Schritt <
nach (1,1)
und >
nach (1,-1)
.
Der eigentliche Code :
wird als Trennzeichen zwischen den verschiedenen Zeichenfolgen verwendet. Der zweite reguläre Ausdruck ist nur eine Golfform des standardmäßigen .NET- regulären Ausdrucks für ausgeglichene Saiten .
Zu beachten ist, dass :
in jedem Schritt nur eine einzige Zeichenfolge zwischen Zeichenfolgen eingefügt wird, die zweite Regex jedoch mit einer führenden und einer nachfolgenden Zeichenfolge übereinstimmt :
(und da Übereinstimmungen sich nicht überlappen können, bedeutet dies, dass benachbarte Zeichenfolgen, die aus einer Vorlage im letzten Schritt generiert wurden, nicht beide übereinstimmen können ). Dies ist jedoch kein Problem, da höchstens einer dieser drei Werte jemals übereinstimmen kann:
- Wenn die Zeichenfolge, die mit "" endet,
_
übereinstimmt, ist das Präfix ohne "" _
bereits richtig ausgeglichen und / <
oder >
würde das Gleichgewicht aufheben.
- Wenn die Zeichenfolge in endend
>
Streichhölzer, wird der String ausgeglichen mit , dass >
, so _
oder <
würde dieses Gleichgewicht abwerfen.
- Saiten, die auf enden,
<
können niemals ausgeglichen werden.