Ihre Aufgabe ist es, die Eingabe zu analysieren und die Formel für den n-ten Term auszugeben, wenn es sich um eine arithmetische Folge handelt, andernfalls sollte "NAAP" gedruckt werden.
Eingang
Die Eingabe (von STDIN) besteht aus wenigen Zahlen zwischen 4 und 10 Zahlen, wobei jede Zahl im Bereich zwischen -1000 und einschließlich 1000 liegt und durch ein Trennzeichen (ein Leerzeichen oder ein Komma oder ein Semikolon) getrennt ist deine Vorliebe]). Hier sind einige Beispieleingaben.
12,14,16,18 //valid
-3 4 5 1 -2 -4 //valid
45;35;-35 //invalid (only three numbers are present instead of the minimum of 4 numbers)
2,32;21,321 //invalid (it uses two different delimiters: `,` and `;`)
Ausgabe
Das Programm sollte zuerst prüfen, ob die Eingabe eine arithmetische Folge ist oder nicht.
Arithmetische Progressionen (AP) auf den Punkt gebracht: Jeder AP hat einen gemeinsamen Unterschied. Dies ist der Unterschied zwischen den Termen $ n $ und $ {n-1} $ (im Grunde $ a (n + 1) - a (n) $, wobei a
die Funktion für die Sequenz ist). Dieser Unterschied bleibt für jeden Wert von $ n $ in einem AP gleich. Wenn es keinen gemeinsamen Unterschied gibt, handelt es sich nicht um eine arithmetische Folge. Um den Wert des n-ten Terms zu berechnen, verwenden Sie diese Formel $ a (n) = a (1) + (n-1) d $, wobei $ a (1) $ der erste Term und $ d $ der gemeinsame ist Unterschied.
Wenn es sich nicht um eine arithmetische Folge handelt, sollte das Programm die Fehlermeldung "NAAP" (kurz für "Not An Arithmetic Progression") ausgeben.
Wenn es sich um eine arithmetische Folge handelt, sollte das Programm den vereinfachten n-ten Term der Sequenz in STDOUT drucken.
Beispiel:
> 1,3,5,7,9
2n-1
Erläuterung: Dies ist ein AP, da es einen gemeinsamen Unterschied gibt ($ 3 - 1 = 2 $). Dann verwenden Sie die Formel $ a (n) = a (1) + (n-1) d $
Daher ist die Ausgabe 2n-1
(beachten Sie das Fehlen von Leerzeichen)
Standardlücken sind standardmäßig nicht zulässig.
Sie können eine Funktion erstellen, wenn Sie möchten (mit dem Zahlenarray als Parameter). Wenn nicht, müssen Sie ein vollständiges Programm erstellen , das Eingaben als Zeichenfolge oder Array verwendet und entsprechend ausgibt.
Testfälle:
1.
1,3,5,7,9
2n-1
2.
1 3 12312 7 9
NAAP
3.
-6;8;22;36;50
14n-20
4.
5,1,-3,-7,-11,-15
-4n+9
5.
-5,-7,-9,-11,-13,-15
-2n-3
6.
3,3,3,3,3,3,3,3,3
0n+3
7.
-4,-5,-6,-7
-1n-3
Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes! (Entschuldigung für den schlechten Mathe-Jax)
Anregungen sind willkommen!
quelle
0,0,0,0
und3,1,-1,-3,-5
arithmetische Progressionen? Wenn ja, denke ich, wären sie gute Testfälle, da sie eine Methode gebrochen haben, die ich versucht habe.Antworten:
Pyth, 30 Bytes
Testsuite
Um zu überprüfen, ob es sich um eine arithmetische Prozession handelt, wird eine vektorisierte Subtraktion zwischen jedem Element und dem vorherigen verwendet
-VtQQ
. Ein Ternär prüft, ob das Ergebnis (?tJ{
) mehrere Werte enthält, und druckt in diesemNAAP
Fall. Um das+
oder das-
Richtige zu finden, wird die Mod-Formatierung%+d
verwendet.quelle
Haskell, 103 Bytes
Anwendungsbeispiel:
Wie immer in Haskell verbraucht eine ausgefallene Ausgabeformatierung (z. B. Mischen von Zahlen mit Zeichenfolgen) viele Bytes (etwa 40). Die Programmlogik ist recht kompakt:
quelle
TI-BASIC, 70 Bytes
Um die fehlende Konvertierung von Zahlen in Zeichenfolgen von TI-BASIC zu beheben, wird die Ausgabe auf dem Grafikbildschirm (
Text(
) verwendet, wenn der Verlauf arithmetisch ist, wodurch die Argumente automatisch miteinander verknüpft werden .Dies setzt voraus, dass negative Zahlen mit dem High-Minus-Zeichen von TI-BASIC (das ein wenig aussieht
⁻
) und nicht mit dem binären Minuszeichen eingegeben werden . Die Ausgabe verwendet jedoch das binäre Minuszeichen.quelle
Japt ,
605251 BytesProbieren Sie es online aus!
Die Eingabe kann mit einem beliebigen Trennzeichen erfolgen, da der Interpreter so aufgebaut ist;)
Ungolfed und Erklärung
quelle
Matlab, 103 Bytes
quelle
CJam, 38 Bytes
Dies ist eine anonyme Funktion, die ein Array auf dem Stapel als Eingabe verwendet und eine Zeichenfolge als Ausgabe auf dem Stapel belässt. Probieren Sie es online mit zusätzlichem E / A-Code zum Testen aus.
Erläuterung:
quelle
JavaScript (ES6), 91 Byte
Erläuterung
Prüfung
quelle
Perl 6,
123102101 BytesEDIT: Negiere keinen Unterschied
BEARBEITEN: Verwenden Sie anonymes Sub, logische Operatoren und String-Interpolation. Danke Brad Gilbert b2gills
Testprogramm (liest von stdin):
Erläuterung:
quelle
sub f
. Auch wenn Sie@_
stattdessen verwenden@a
, würden Sie mehrere Bytes sparen.{my@b=@_.rotor...
. Auch sollten Sie nicht Pars um den Zustand einer setzeneif
Aussage, ist dies nicht Perl 5. Wenn Sie sich das geändert ,if
um@b.end&&"NAAP"||$_=...
Sie sich noch ein paar Bytes zu speichern. Sie können diese letzteif
Anweisung auch entfernen, wenn Sie"@b[0]n{'+'x($_>=0)}$_"
stattdessen 4 Bytes sparen.sub
am Anfang nicht, ohne dass es ein anonymer Block wird. Auch nur damit Sie wissen, hätte ich nicht daran gedacht, zu verwenden,.map({[-] $_})
was ich wahrscheinlich verwendet hätte,».map(*-*).flat
was länger ist. Jetzt muss ich meine eigenen Einträge durchgehen, um zu sehen, ob ich es mit Ihrem Trick verkürzen kann.Ruby,
957876 Bytes78 Bytes
95 Bytes
Ungolfed:
Verwendung:
quelle
Python 3, 92 Bytes
Basierend auf meiner Antwort von Find the Sequence
def m(t):s=str;a=t[0];b=t[1];q=b-a;return((s(q)+'n'+'+'*(0<a-q)+s(a-q)),'NAAP')[t[2]/b==b/a]
quelle