A sequência mais-menos
A sequência mais-menos é aquela que começa com duas sementes a(0)
e b(0)
. Cada iteração dessa sequência é a adição e subtração dos dois membros anteriores da sequência. Isto é, a(N) = a(N-1) + b(N-1)
e b(N) = a(N-1) - b(N-1)
.
Objetivo Produza a sequência mais-menos, em infinitude ou nos primeiros K
passos dados K
. Você pode fazer isso usando um programa de saída infinita, um gerador ou uma função / programa que fornece os primeiros K
passos. A ordem de saída não importa, desde que seja consistente. ( b(K) a(K)
Ou seja, ou a(K) b(K)
com algum separador não numérico e não nova linha no meio.) A saída deve começar com a entrada.
Casos de teste
Para entradas 10 2
(de a(0) b(0)
, essa é uma saída possível para a primeira abordagem K (ou uma subseção da abordagem infinita):
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
Para entradas 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
Este é um código de golfe , portanto o programa mais curto em bytes vence.
a
e podeb
ser uma nova linha?Respostas:
Gelatina , 5 bytes
Essa é uma abordagem recursiva. Devido à otimização da chamada de cauda, o único limite é a capacidade de ajustar os dois números inteiros na memória. A saída é uma lista por linha.
Experimente online!
Como funciona
fonte
Main link
realmente significa?¶
e linefeeds podem ser usados de forma intercambiável. Você pode usar os dois no modo UTF-8, mas há apenas\x7f
para representá-los na página de códigos do Jelly.Python 2, 31 bytes
Imprime para sempre. Bem, eventualmente você excede o limite de recursão, mas isso é uma limitação do sistema.
fonte
sys.setrecursionlimit
while
loop se comporta de maneira diferente do que você está fazendo.f=lambda a,b:print(a,b)or f(a+b,a-b)
)MATL , 10 bytes
Esta versão produzirá um número infinito de elementos na sequência mais-menos.
Experimente Online! (pare depois de executar devido ao loop infinito)
Explicação
fonte
Haskell, 19 bytes
Produz uma sequência infinita de números. Exemplo de uso:
fonte
Pitão,
109 bytesGraças a @isaacg por 1 byte.
Imprime uma sequência infinita de pares.
fonte
Q
s podem ser removidos - Pyth os preencherá implicitamente.C, 81 bytes
fonte
05AB1E , 7 bytes
Usa o primeiro método -k . Insira o seguinte para:
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
k, 12
.
Também poderia ser chamado na forma de
fonte
APL, 37 caracteres
Pode ser usado como
ou
fonte
MathGolf , 8 bytes
Experimente online!
Recebe entrada na ordem inversa, mas isso é simplesmente porque é assim que eles são colocados na pilha. Caso contrário, seria 1 byte a mais. 2-3 bytes vem da saída. Sem a necessidade de realmente imprimir um par por linha, o programa poderia ser
æ`‼+-∟
(preenche a pilha com os elementos da sequência indefinidamente) ouÉ‼+-∟
(imprime todos os elementos da sequência, exceto o primeiro a depurar, desde que o-d
sinalizador esteja ativo) .Explicação
fonte
ABC
, eu recebo um erro on-linestdin = StdIn(line)
no código Python ..'ABC'
ou"ABC"
. Internamente,ast.literal_eval
é usado para analisar a entrada. Ainda existem algumas peculiaridades que precisam ser resolvidas, mas você deve conseguir fazer isso .ABCDEF
para[AB, CD, EF]
?2ô_2<\1>]
(codificado para o comprimento de entrada 6 e dividido em partes do tamanho 2, pois era isso que eu precisava, mas provavelmente deveria ser modificável para trabalhar com tamanhos de entrada e tamanhos de peças genéricos)./
Python 3.5,
5543 bytes:Imprime a sequência correta aparentemente para sempre. Consegui deixar isso continuar por cerca de 30 minutos sem que nenhum erro fosse gerado, e o programa imprimiu 2301 dígitos para o primeiro número e 1150 dígitos para o segundo! Com base nisso, eu acho que, sendo fornecido hardware suficiente para rodar, isso pode durar MUITO MAIS e imprimir mais dígitos MUITO, além de teoricamente não ter limite de recursão, cortesia do
while
loop!fonte
a
eb
corresponder à pergunta.while
e uma chamada recursiva agora ...Reng v.3.2, 9 bytes (resposta automática, não concorrente)
Toma duas entradas (
a b
) e saídasb a
. Experimente aqui!i
recebe entrada duas vezes,¤
duplica a pilha,æ
imprime um número e um espaço (e o faz duas vezes, sendo dois),ö
imprime uma nova linha,±
faz o que você pode esperar e2.
pula os próximos dois caracteres, envolvendo a entrada obtendo caracteres.fonte
Python 2.7,
56, 42 bytes:Loop simples que imprime para sempre (ish).
fonte
a,b=input()
, poderá remover o recuo.Lote, 54 bytes
Observe que o CMD.EXE é limitado a números inteiros assinados de 32 bits; portanto, ele excederá rapidamente e imprimirá mensagens de erro e lixo.
fonte
Julia, 25 bytes
Máximo abuso de sintaxe. Julia é estranha . Experimente online!
Versão alternativa, 29 bytes
Observe que a saída acabará excedendo, a menos que você chame
<|
um BigInt . Infelizmente,show
prefixaremos cada arrayBigInt
nesse caso. Ao custo de mais quatro bytes, podemos gerar saída separada por espaço em branco para todos os tipos numéricos.Experimente online!
Como funciona
Definimos o operador binário
<|
para propósitos externos. Ele é indefinido nas versões recentes do Julia, mas ainda é reconhecido como operador pelo analisador. Embora\
(não definido explicitamente para números inteiros) seja um byte mais curto, sua alta precedência exigiria a substituiçãoa+b<|a-b
por(a+b)\(a-b)
(+3 bytes) ou\(a+b,a-b)
(+2 bytes).Quando
a<|b
é executado, começa chamandoshow
para imprimir [ab] em STDOUT. Em seguida,a+b<|a-b
recursivamente chama<|
a soma ou a diferença.Como a recursão é (supostamente) infinita, a comparação
<
nunca é realizada; seu único objetivo é encadear as duas partes do código. Isso economiza dois bytes sobre a alternativa mais direta([a b]|>show;a+b<|a-b)
.fonte
Perl 6 , 23 bytes (infinito)
Edit: graças ao JoKing, a versão da sequência agora é a mais curta (também removida
.say
por esclarecimento do OP:TIO: InfiniteSeq
Resposta funcional antiga
TIO: InfiniteFunc
Observe que o Perl 6 não tem limite de recursão per se, é puramente baseado na memória disponível, portanto, isso atingirá os milhões antes de bombardear.
fonte
Fator, 62 bytes
recursive
, ou a pilha de chamadas acaba muito rapidamente.fonte
Ruby, 25 bytes
Baseado na solução Python da xnor . Talvez eu faça um gerador em outra resposta, mas isso imprimirá
a
, entãob
, então o novoa
, depois o novob
, ad infinitum.fonte
Python 3, 42 bytes
Eu queria escrever um gerador para esta função, e foi o que fiz.
No Python 3, a sequência é gerada desta maneira:
fonte
Lisp comum, 57
Usa
psetf
, que afeta valores para variáveis em paralelo, e aloop
sintaxe simples .fonte
bash + coreutils GNU, 75 bytes
Invocação:
fonte
CP / M 8080, 47 bytes
mnemônicos do z80, mas nada que o 8080 não tenha, fonte comentou uma vez que eu decidi contar a saída em vez dos nomes de função de entrada mas concisos retidos, montados à mão para perdoar os 'xx's onde eu sei o número de bytes, mas não funcionou os endereços de saída ou compensações:
fonte
Clojure, 44 bytes
Função que produz uma sequência preguiçosa infinita.
fonte
Perl 5, 40 bytes
requer
-E
(grátis)ou (mesmo comprimento)(Procurei no último porque ele deve ter erros de arredondamento para algumas iterações.)
Gorro.
Mas suspeito que deve haver uma solução Perl 5 mais curta.
fonte
RETURN , 21 bytes
Try it here.
Operador-lambda recursivo. Uso:
Explicação
fonte
> <> , 26 bytes
Chamada com
a
,b
,n
na pilha, onden
é o número de voltas ou um valor negativo para a saída infinito. Saídasa
eb
separadas por um espaço.Como explicação, veja como a pilha evolui durante o tempo de execução:
Você pode experimentá-lo no intérprete on-line com uma quantidade positiva de turnos, mas precisará usar o intérprete python oficial para testar o modo infinito.
fonte
Fuzzy Octo Guacamole ,
1716 bytes(não concorrente, usa recursos depois do desafio)
Isso foi difícil de executar devido a erros do lado do cliente. Mas entendi!
Passo a passo:
fonte
:
para o início do loop e eliminar a necessidade de imprimir duas vezes?Sério, 12 bytes
Emite um fluxo infinito, o formato é
b(n) a(n)
um par de saídas por linha.Nenhum link on-line porque o TryItOnline não funciona tão bem com loops infinitos.
Explicação:
fonte
J,
1612 bytesProduz apenas os primeiros valores de k para a sequência com base nas sementes especificadas.
Economizou 4 bytes usando o truque (ou açúcar sintático) mostrado por @randomra neste comentário .
Uso
fonte
C #, 50 bytes
Fonte completa, incluindo caso de teste:
O tipo de dados BigInteger é usado para que os números não excedam e se tornem 0. No entanto, como é uma solução recursiva, espere um estouro de pilha.
fonte