Die Plus-Minus-Reihenfolge
Die Plus-Minus-Sequenz beginnt mit zwei Startwerten a(0)
und b(0)
. Jede Iteration dieser Sequenz ist die Addition und Subtraktion der beiden vorherigen Mitglieder der Sequenz. Das ist a(N) = a(N-1) + b(N-1)
und b(N) = a(N-1) - b(N-1)
.
Zielsetzung Produzieren Sie die Plus-Minus-Sequenz in unendlich oder die ersten angegebenen K
Schritte K
. Sie können dies mit einem unendlichen Ausgabeprogramm, einem Generator oder einer Funktion / einem Programm tun, die / das die ersten K
Schritte vorgibt. Die Ausgabereihenfolge spielt keine Rolle, solange sie konsistent ist. (Das heißt, b(K) a(K)
oder a(K) b(K)
, mit einem nicht numerischen Trennzeichen, das keine Zeilenumbrüche enthält.) Die Ausgabe muss mit der Eingabe beginnen.
Testfälle
Für Eingaben 10 2
(von a(0) b(0)
ist dies eine mögliche Ausgabe für den ersten K-Ansatz (oder einen Unterabschnitt des unendlichen Ansatzes):
10 2
12 8
20 4
24 16
40 8
48 32
80 16
96 64
160 32
192 128
320 64
384 256
640 128
768 512
1280 256
1536 1024
2560 512
3072 2048
5120 1024
6144 4096
10240 2048
12288 8192
20480 4096
24576 16384
40960 8192
49152 32768
81920 16384
98304 65536
Für Eingänge 2 20 10
( a(0) b(0) k
):
2 20
22 -18
4 40
44 -36
8 80
88 -72
16 160
176 -144
32 320
352 -288
Dies ist ein Code-Golf , also gewinnt das kürzeste Programm in Bytes.
a
undb
eine neue Zeile sein?Antworten:
Gelee , 5 Bytes
Dies ist ein rekursiver Ansatz. Aufgrund der Tail-Call-Optimierung besteht die einzige Einschränkung darin, dass beide Ganzzahlen in den Speicher passen. Ausgabe ist eine Liste pro Zeile.
Probieren Sie es online!
Wie es funktioniert
quelle
Main link
eigentlich?¶
und Linefeeds können austauschbar verwendet werden. Sie können beides im UTF-8-Modus verwenden, es gibt jedoch nur\x7f
eine Darstellung in Jellys Codepage.Python 2, 31 Bytes
Druckt für immer. Nun, irgendwann überschreiten Sie das Rekursionslimit, aber das ist eine Systembeschränkung.
quelle
sys.setrecursionlimit
while
Schleife verhält sich anders als das, was Sie tun.f=lambda a,b:print(a,b)or f(a+b,a-b)
)MATL , 10 Bytes
Diese Version gibt eine unendliche Anzahl von Elementen in der Plus-Minus-Sequenz aus.
Probieren Sie es online! (stoppen Sie es nach dem Laufen wegen Endlosschleife)
Erläuterung
quelle
Haskell, 19 Bytes
Erzeugt eine unendliche Folge von Zahlen. Anwendungsbeispiel:
quelle
Pyth,
109 BytesVielen Dank an @isaacg für 1 Byte.
Gibt eine unendliche Folge von Paaren aus.
quelle
Q
s können entfernt werden - Pyth füllt sie implizit aus.C 81 Bytes
quelle
05AB1E , 7 Bytes
Verwendet die first-k- Methode. Geben Sie Folgendes ein für:
Code:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
k, 12
.
Könnte auch in Form von genannt werden
quelle
APL, 37 Zeichen
Kann als verwendet werden
oder
quelle
MathGolf , 8 Bytes
Probieren Sie es online!
Nimmt die Eingabe in umgekehrter Reihenfolge vor, aber das liegt einfach daran, dass sie auf den Stapel geschoben werden. Sonst wäre es 1 Byte länger. 2-3 Bytes kommen von der Ausgabe. Ohne dass tatsächlich ein Paar pro Zeile gedruckt werden muss, könnte das Programm
æ`‼+-∟
(füllt den Stapel auf unbestimmte Zeit mit den Elementen der Sequenz) oderÉ‼+-∟
(druckt alle Elemente der Sequenz mit Ausnahme des ersten zu debuggenden Elements, solange das-d
Flag aktiv ist) sein. .Erläuterung
quelle
ABC
Zum Beispiel erhalte ich einen Fehlerstdin = StdIn(line)
im Python-Code.'ABC'
oder angegeben werden"ABC"
. Internast.literal_eval
wird verwendet, um die Eingabe zu analysieren. Es gibt noch einige Macken , die geführt werden müssen gebügelt, aber Sie sollten die Lage zu tun dies .ABCDEF
zu[AB, CD, EF]
?2ô_2<\1>]
(hartcodiert auf Eingabelänge 6 und aufgeteilt in Teile der Größe 2, da dies das war, was ich brauchte, aber wahrscheinlich sollte modifizierbar für generische Eingangsgrößen und Teilgrößen)./
Python 3.5,
5543 Bytes:Gibt scheinbar für immer die richtige Reihenfolge aus. Ich habe dies ungefähr 30 Minuten lang laufen lassen, ohne dass ein Fehler aufgetreten ist, und das Programm hatte 2301 Stellen für die erste und 1150 Stellen für die zweite Zahl ausgedruckt! Ausgehend davon, denke ich, kann dies viel länger dauern, wenn genügend Hardware zum Laufen bereitgestellt wird, und es werden viel mehr Ziffern ausgedruckt, und es gibt theoretisch auch keine Rekursionsbeschränkung, dank der
while
Schleife!quelle
a
undb
der Frage zu entsprechen.while
jetzt sowohl einen als auch einen rekursiven Anruf ...Reng v.3.2, 9 Bytes (Selbstantwort, nicht konkurrierend)
Nimmt zwei Ein- (
a b
) und Ausgängeb a
. Probieren Sie es hier aus!i
Nimmt die Eingabe zweimal vor,¤
dupliziert den Stapel, gibtæ
eine Zahl und ein Leerzeichen aus (und zwar zweimal, wenn es zwei gibt),ö
druckt eine neue Zeile,±
führt die erwarteten Schritte aus und2.
überspringt die nächsten beiden Zeichen, wobei die eingegebenen Zeichen umbrochen werden .quelle
Python 2.7,
56, 42 Bytes:Einfache Schleife, die entweder für immer (ish) druckt.
quelle
a,b=input()
, können Sie den Einzug entfernen.Batch, 54 Bytes
Beachten Sie, dass CMD.EXE auf 32-Bit-Ganzzahlen mit Vorzeichen beschränkt ist, sodass es schnell überläuft und Müll- und Fehlermeldungen ausgibt.
quelle
Julia, 25 Bytes
Maximaler Syntaxmissbrauch. Julia ist komisch . Probieren Sie es online!
Alternative Version, 29 Byte
Beachten Sie, dass die Ausgabe möglicherweise überläuft, es sei denn, Sie rufen auf
<|
ein BigInt auf . Leidershow
wirdBigInt
in diesem Fall jedem Array ein Präfix vorangestellt . Auf Kosten von vier weiteren Bytes können wir eine durch Leerzeichen getrennte Ausgabe für alle numerischen Typen generieren.Probieren Sie es online!
Wie es funktioniert
Wir definieren den binären Operator
<|
für Out-Zwecke. Es ist in neueren Versionen von Julia nicht definiert, wird jedoch vom Parser weiterhin als Operator erkannt. Während\
(nicht explizit für Ganzzahlen definiert) ein Byte kürzer ist, müsste esa+b<|a-b
bei hoher Priorität durch(a+b)\(a-b)
(+3 Byte) oder\(a+b,a-b)
(+2 Byte) ersetzt werden.Wann
a<|b
es ausgeführt wird, ruft esshow
auf, um [ab] an STDOUT zu drucken. Ruft danna+b<|a-b
rekursiv<|
die Summe oder die Differenz auf.Da die Rekursion unendlich ist (sein soll), wird der Vergleich
<
niemals durchgeführt; Der einzige Zweck ist die Verkettung der beiden Teile des Codes. Dies spart zwei Bytes gegenüber der einfacheren Alternative([a b]|>show;a+b<|a-b)
.quelle
Perl 6 , 23 Bytes (unendlich)
Edit: dank JoKing ist die Sequenzversion jetzt die kürzeste (auch
.say
per Klarstellung aus OP entfernt:TIO: InfiniteSeq
Alte funktionale Antwort
TIO: InfiniteFunc
Beachten Sie, dass Perl 6 an sich kein Rekursionslimit hat. Es basiert ausschließlich auf dem verfügbaren Speicher, sodass dieser die Millionen erreicht, bevor er bombardiert wird.
quelle
Faktor 62 Bytes
recursive
Sonst geht der Callstack zu schnell aus.quelle
Ruby, 25 Bytes
Basierend auf der Python-Lösung von xnor . Vielleicht werde ich einen Generator in einer anderen Antwort, aber dies wird gedruckt
a
, dannb
, dann wird die neuea
, dann wird die neueb
, ad infinitum.quelle
Python 3, 42 Bytes
Ich wollte einen Generator für diese Funktion schreiben, und das tat ich auch.
In Python 3 wird die Sequenz folgendermaßen generiert:
quelle
Gemeiner Lisp, 57
Verwendet
psetf
, was Werte zu Variablen parallel beeinflusst, und die einfacheloop
Syntax.quelle
Bash + GNU Coreutils, 75 Bytes
Aufruf:
quelle
CP / M 8080, 47 Bytes
z80-Mnemonik, aber nichts, was der 8080 nicht hat, kommentierte die Quelle, als ich mich entschied, die Ausgabe statt der Eingabe zu zählen, aber knappe Funktionsnamen beizubehalten die Ausgangsadressen oder Offsets:
quelle
Clojure, 44 Bytes
Funktion, die eine unendliche Lazy-Sequenz erzeugt.
quelle
Perl 5, 40 Bytes
benötigt
-E
(kostenlos)oder (gleiche Länge)(Letzteres habe ich durchgestrichen, da es bei einigen Iterationen Rundungsfehler geben sollte.)
Hutspitze.
Ich vermute aber, dass es eine kürzere Perl 5-Lösung geben muss.
quelle
RETURN , 21 Bytes
Try it here.
Rekursives Operator-Lambda. Verwendung:
Erläuterung
quelle
> <> 26 Bytes
Rufen mit
a
,b
,n
auf dem Stapel, wobein
die Anzahl der Windungen oder ein negativer Wert für unendlichen Ausgang. Ausgängea
undb
durch ein Leerzeichen getrennt.Im Folgenden wird erklärt, wie sich der Stack zur Laufzeit entwickelt:
Sie können es mit dem Online-Interpreter mit einer positiven Anzahl von Umdrehungen versuchen, aber Sie müssen den offiziellen Python-Interpreter verwenden, um den unendlichen Modus zu testen.
quelle
Fuzzy Octo Guacamole ,
1716 Bytes(Nicht konkurrierend, verwendet Funktionen später als die Herausforderung)
Dies war aufgrund clientseitiger Fehler schwer zu bewerkstelligen. Aber ich habe es verstanden!
Exemplarische Vorgehensweise:
quelle
:
an den Anfang der Schleife bewegen und das zweimalige Drucken überflüssig machen?Im Ernst, 12 Bytes
Gibt einen unendlichen Stream aus, das Format ist
b(n) a(n)
ein Ausgangspaar pro Zeile.Kein Online-Link, da TryItOnline mit Endlosschleifen nicht so gut funktioniert.
Erläuterung:
quelle
J,
1612 BytesErzeugt nur die ersten k- Werte für die Sequenz basierend auf den angegebenen Startwerten.
Mit dem von @randomra gezeigten Trick (oder syntaktischen Zucker) wurden 4 Bytes gespeichert Kommentar .
Verwendung
quelle
C #, 50 Bytes
Vollständige Quelle, einschließlich Testfall:
Der BigInteger-Datentyp wird verwendet, damit die Zahlen nicht überlaufen und zu 0 werden. Da es sich jedoch um eine rekursive Lösung handelt, müssen Sie mit einem Stapelüberlauf rechnen.
quelle