La séquence plus-moins
La séquence plus-moins est celle qui commence par deux graines, a(0)
et b(0)
. Chaque itération de cette séquence est l'addition et la soustraction des deux membres précédents de la séquence. C'est, a(N) = a(N-1) + b(N-1)
et b(N) = a(N-1) - b(N-1)
.
Objectif Produire la séquence plus-moins, à l'infini ou aux premières K
étapes données K
. Vous pouvez le faire en utilisant un programme de sortie infini, un générateur ou une fonction / programme qui donne les premières K
étapes. L'ordre de sortie n'a pas d'importance, tant qu'il est cohérent. (C'est-à-dire, b(K) a(K)
ou a(K) b(K)
, avec un séparateur non numérique, non-nouvelle ligne entre les deux.) La sortie doit commencer par l'entrée.
Cas de test
Pour les entrées 10 2
(de a(0) b(0)
, c'est une sortie possible pour la première approche K (ou une sous-section de l'approche infinie):
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
Pour les entrées 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
Il s'agit d'un code-golf , donc le programme le plus court en octets l'emporte.
a
etb
peut- il être une nouvelle ligne?Réponses:
Gelée , 5 octets
Il s'agit d'une approche récursive. En raison de l'optimisation des appels de queue, la seule limite est la possibilité d'ajuster les deux entiers en mémoire. La sortie est une liste par ligne.
Essayez-le en ligne!
Comment ça marche
la source
Main link
signifie réellement?¶
et les sauts de ligne peuvent être utilisés de manière interchangeable. Vous pouvez utiliser les deux en mode UTF-8, mais il n'y a que\x7f
pour les représenter dans la page de codes de Jelly.Python 2, 31 octets
Imprime pour toujours. Eh bien, vous finissez par dépasser la limite de récursivité, mais c'est une limitation du système.
la source
sys.setrecursionlimit
while
boucle se comporte différemment de ce que vous faites.f=lambda a,b:print(a,b)or f(a+b,a-b)
)MATL , 10 octets
Cette version affichera un nombre infini d'éléments dans la séquence plus-moins.
Essayez-le en ligne! (arrêtez-le après avoir exécuté en raison de la boucle infinie)
Explication
la source
Haskell, 19 octets
Produit une séquence infinie de nombres. Exemple d'utilisation:
la source
Pyth,
109 octetsMerci à @isaacg pour 1 octet.
Imprime une séquence infinie de paires.
la source
Q
s peuvent être supprimés - Pyth les remplira implicitement.C, 81 octets
la source
05AB1E , 7 octets
Utilise la méthode first-k . Saisissez les informations suivantes pour:
Code:
Explication:
Utilise l' encodage CP-1252 . Essayez-le en ligne!
la source
k, 12
.
Pourrait également être appelé sous la forme de
la source
APL, 37 caractères
Peut être utilisé comme
ou
la source
MathGolf , 8 octets
Essayez-le en ligne!
Prend l'entrée dans l'ordre inverse, mais c'est simplement parce que c'est comme ça qu'ils sont poussés sur la pile. Sinon, ce serait 1 octet de plus. 2-3 octets proviennent de la sortie. Sans avoir besoin d'imprimer réellement une paire par ligne, le programme pourrait être
æ`‼+-∟
(remplit la pile avec les éléments de la séquence indéfiniment), ouÉ‼+-∟
(imprime tous les éléments de la séquence à l'exception du premier à déboguer, tant que le-d
drapeau est actif) .Explication
la source
ABC
, j'obtiens une erreur en lignestdin = StdIn(line)
dans le code Python ..'ABC'
ou"ABC"
. En interne,ast.literal_eval
est utilisé pour analyser l'entrée. Il y a encore quelques bizarreries qui doivent être aplanies, mais vous devriez être en mesure de faire cela .ABCDEF
à[AB, CD, EF]
?2ô_2<\1>]
(codé en dur à la longueur d'entrée 6 et divisé en parties de taille 2, car c'était ce dont j'avais besoin, mais devrait probablement être modifiables pour fonctionner avec des tailles d'entrée et des tailles de pièce génériques)./
Python 3.5,
5543 octets:Imprime la séquence correcte pour toujours. J'ai pu laisser cela se poursuivre pendant environ 30 minutes sans aucune erreur, et le programme avait imprimé 2301 chiffres pour le premier numéro, et 1150 chiffres pour le second! Sur cette base, je suppose que, étant donné le matériel suffisant pour fonctionner, cela peut continuer WAY plus longtemps et imprimer WAY plus de chiffres, et n'a également théoriquement aucune limite de récursivité, grâce à la
while
boucle!la source
a
et deb
faire correspondre la question.while
appel récursif et un appel maintenant ...Reng v.3.2, 9 octets (auto-réponse, non concurrent)
Prend deux entrées (
a b
) et sortiesb a
. Essayez-le ici!i
prend l'entrée deux fois,¤
duplique la pile,æ
imprime un nombre et un espace (et le fait deux fois, il y en a deux),ö
imprime une nouvelle ligne,±
fait ce que vous attendez et2.
saute les deux caractères suivants, encapsulant l'entrée en obtenant les caractères.la source
Python 2.7,
56, 42 octets:Boucle simple qui imprime pour toujours (ish).
la source
a,b=input()
, vous pouvez supprimer le retrait.Lot, 54 octets
Notez que CMD.EXE est limité aux entiers signés 32 bits, donc il débordera rapidement et imprimera les messages inutiles et d'erreur.
la source
Julia, 25 octets
Abus de syntaxe maximum. Julia est bizarre . Essayez-le en ligne!
Version alternative, 29 octets
Notez que la sortie finira par déborder, sauf si vous appelez
<|
un BigInt . Malheureusement,show
préfixe chaque tableauBigInt
dans ce cas. Au prix de quatre octets supplémentaires, nous pouvons générer une sortie séparée par des espaces pour tous les types numériques.Essayez-le en ligne!
Comment ça marche
Nous définissons l'opérateur binaire
<|
à des fins de sortie. Il n'est pas défini dans les versions récentes de Julia, mais est toujours reconnu comme opérateur par l'analyseur. Bien que\
(non explicitement défini pour les entiers) soit un octet plus court, sa priorité élevée nécessiterait le remplacementa+b<|a-b
par(a+b)\(a-b)
(+3 octets) ou\(a+b,a-b)
(+2 octets).Une fois
a<|b
exécuté, il commence par appelershow
pour imprimer [ab] sur STDOUT. Puis,a+b<|a-b
récursivement appelle<|
la somme ou la différence.Puisque la récursivité est (supposée être) infinie, la comparaison
<
n'est jamais effectuée; son seul but est de chaîner les deux parties du code. Cela économise deux octets sur l'alternative la plus simple([a b]|>show;a+b<|a-b)
.la source
Perl 6 , 23 octets (infini)
Edit: grâce à JoKing, la version de séquence est désormais la plus courte (également supprimée
.say
par clarification d'OP:TIO: InfiniteSeq
Ancienne réponse fonctionnelle
TIO: InfiniteFunc
Notez que Perl 6 n'a pas de limite de récursivité en soi, il est purement basé sur la mémoire disponible, donc cela atteindra les millions avant le bombardement.
la source
Facteur, 62 octets
recursive
, sinon la pile d'appels s'épuise trop rapidement.la source
Rubis, 25 octets
Basé sur la solution Python de xnor . Je ferai peut-être un générateur dans une autre réponse, mais cela imprimera
a
, puisb
, le nouveaua
, puis le nouveaub
, à l'infini.la source
Python 3, 42 octets
Je voulais écrire un générateur pour cette fonction, et c'est ce que j'ai fait.
En Python 3, la séquence est générée de cette façon:
la source
Lisp commun, 57
Utilise
psetf
, qui affecte les valeurs des variables en parallèle, et laloop
syntaxe simple .la source
bash + GNU coreutils, 75 octets
Invocation:
la source
CP / M 8080, 47 octets
mnémoniques z80 mais rien que le 8080 n'a pas, a commenté la source une fois que j'ai décidé de compter la sortie plutôt que l'entrée mais les noms de fonction concis conservés, assemblés à la main alors pardonnez les 'xx's où je connais le nombre d'octets mais je n'ai pas travaillé les adresses ou décalages de sortie:
la source
Clojure, 44 octets
Fonction qui produit une séquence paresseuse infinie.
la source
Perl 5, 40 octets
nécessite
-E
(gratuit)ou (même longueur)(J'ai barré cette dernière car elle devrait contenir des erreurs d'arrondi pour certaines itérations.)
Pointe de chapeau.
Mais je pense qu'il doit y avoir une solution Perl 5 plus courte.
la source
RETOUR , 21 octets
Try it here.
Opérateur lambda récursif. Usage:
Explication
la source
> <> , 26 octets
Appel avec
a
,b
,n
sur la pile, oùn
est le nombre de tours ou une valeur négative pour la sortie infinie. Sortiesa
etb
séparées par un espace.À titre d'explication, voici comment la pile évolue pendant l'exécution:
Vous pouvez l'essayer sur l'interpréteur en ligne avec un nombre de tours positif mais vous devrez utiliser l'interpréteur python officiel pour tester le mode infini.
la source
Octo Guacamole flou ,
1716 octets(non concurrentiel, utilise des fonctionnalités plus tard que le défi)
Cela a été difficile à faire, en raison d'erreurs côté client. Mais je l'ai compris!
Procédure pas à pas:
la source
:
au début de la boucle et éliminer la nécessité d'imprimer deux fois?Sérieusement, 12 octets
Produit un flux infini, le format est
b(n) a(n)
une paire de sorties par ligne.Pas de lien en ligne car TryItOnline ne fonctionne pas très bien avec des boucles infinies.
Explication:
la source
J,
1612 octetsProduit uniquement les k premières valeurs de la séquence en fonction des graines données.
Enregistré 4 octets en utilisant l'astuce (ou sucre syntaxique) montré par @randomra dans ce commentaire .
Usage
la source
C #, 50 octets
Source complète, y compris le cas de test:
Le type de données BigInteger est utilisé pour que les nombres ne débordent pas et deviennent 0. Cependant, comme il s'agit d'une solution récursive, attendez-vous à un débordement de pile.
la source