Aqui estão os primeiros 100 números de uma sequência fácil:
0,1,0,2,1,4,3,7,6,11,10,16,15,22,21,29,28,37,36,46,45,56,55,67,66,79,78,92,91,106,105,121,120,137,136,154,153,172,171,191,190,211,210,232,231,254,253,277,276,301,300,326,325,352,351,379,378,407,406,436,435,466,465,497,496,529,528,562,561,596,595,631,630,667,666,704,703,742,741,781,780,821,820,862,861,904,903,947,946,991,990,1036,1035,1082,1081,1129,1128,1177,1176,1226
Como essa sequência funciona?
n: 0 1 2 3 4 5 6 7 8 9 10 11 12
0, 1-1=0, 2-1=1, 4-1=3, 7-1=6, 11-1=10, 16-1=15,
0+1=1, 0+2=2, 1+3=4, 3+4=7, 6+5=11, 10+6=16, 15+7=22
a(0) = 0
- Para cada ímpar
n
(indexado 0), éa(n-1) + X
(ondeX=1
e aumenta em 1 toda vez que é acessado) - Para cada par
n
(indexado 0), éa(n-1) - 1
Desafio:
Um de:
- Dado um número inteiro de entrada
n
, imprima on
'número th na sequência. - Dado um número inteiro de entrada
n
, imprima os primeirosn
números da sequência. - Emita a sequência indefinidamente sem receber uma entrada ( ou receber uma entrada não utilizada vazia ).
Regras do desafio:
- A entrada
n
pode ser indexada em 0 ou 1. - Se você imprimir (parte da) sequência, poderá usar uma lista / matriz, imprimir em STDOUT com qualquer delimitador (espaço, vírgula, nova linha etc.). Sua chamada.
- Indique qual das três opções você usou em sua resposta.
- Você precisará oferecer suporte a pelo menos os primeiros 10.000 números (o número 10.000 é
12,497,501
).
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta, para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código.
- Além disso, adicione uma explicação, se possível.
Casos de teste:
Cole a bin com os primeiros 10.001 números na sequência. Sinta-se livre para escolher o que quiser.
Alguns números mais altos:
n (0-indexed) Output:
68,690 589,772,340
100,000 1,249,975,000
162,207 3,288,888,857
453,271 25,681,824,931
888,888 98,765,012,346
1,000,000 124,999,750,000
ÎGDN+D<
gera a sequência, mas agarrar o enésimo elemento parece ... difícil em 3 bytes.Oitava , 32 bytes
Experimente online!
Emite o n-ésimo número, indexado em 0. Usa a mesma fórmula que várias outras respostas.
fonte
APL (Dyalog Unicode) ,
1612 bytes SBCSFunção de prefixo tácito anônimo. Indexado a 0.
Experimente online!
+/
a soma de⊢↑
os primeirosn
elementos∘∊
do ε nlisted (achatada)¯1,¨⍨
negativo-um-anexado-a-cada⍳
primeirosn
índices (0 an
–1fonte
Gelatina , 6 bytes
Um link monádico que aceita (indexado 1)
n
que retornaa(n)
.Experimente online! Ou veja a suíte de testes
Quão?
fonte
PHP ,
7364555147 bytesPrimeiro método
Resposta do primeiro código de golfe!
Tenho certeza de que existem truques do PHP para torná-lo mais curto e a matemática provavelmente pode ser melhorada.
Pega n como o primeiro argumento e gera o enésimo número na sequência.
Menos 9 bytes removendo "$ x = 0;" e "$ i = 0".
Menos 9 bytes graças a @Kevin Cruijssen, melhorando o loop for e a perda da tag end.
Menos 1 byte usando bit a bit ou "|" em vez de "(int)"
Menos 3 bytes, graças ao @Dennis, pois você pode remover as tags executando-o na linha de comando com "php -r 'code here'"
Experimente online!
Segundo método
Combinei minha resposta anterior com um método totalmente novo!
Usando o XOR e o operador de inquilino para alternar entre somas no loop.
Edit: Isso não funciona para n = 0 e não tenho idéia do porquê. $ i não está atribuído; portanto, deve ser 0; portanto, o loop
($i<$argv[1])
falhará(0<0==false)
; portanto, um $ x não atribuído deve gerar como 0 e não 1.Experimente online!
Terceiro método
Converter a fórmula do Excel @Wernisch criada para PHP fornece uma solução de 47 bytes
Experimente online!
fonte
?>
. A remoção$x=0
e$i=0
é realmente permitida (se não,$x=$i=0
teria sido mais curta também). Além disso, o loop pode ser reduzido parafor(;$i<$y+1;)$x+=$i++;
. Qual é -15 bytes no total. Aproveite sua estadia! :)R , 35 bytes
Experimente online!
Eu pensei que essa era uma alternativa interessante à resposta do @ JayCe, pois ela não é muito boa para idiomas sem suporte embutido para matrizes, e acontece também como golfe.
Indexado em 1, retorna os primeiros
n
elementos da sequência.Como funciona:
rbind(n<-1:scan(),-1)
constrói a seguinte matriz:Como R possui matrizes na ordem da coluna maior, se convertêssemos isso em a
vector
, obteríamos um vetorque, se tomarmos uma soma acumulada, teríamos
que é a sequência, apenas sem a liderança
0
.diffinv
felizmente adiciona o zero inicial, então pegamos os primeirosn-1
valores da matriz ediffinv
eles, obtendo os primeirosn
valores da sequência.fonte
diffinv
me apresentar!R ,
3534 bytesExperimente online!
Primeira opção de saída. A mesma fórmula que muitas outras respostas (eu gostaria de apontar para a primeira resposta que fornece a fórmula, não consigo descobrir qual é).
Segunda e terceira opções de saída abaixo:
R , 43 bytes
Experimente online!
R , 51 bytes
Experimente online!
fonte
Matlab / Octave,
3126 bytes5 bytes salvos thx em Luis Mendo!
fonte
fix
vez defloor
, e emn/2+.5
vez deceil(n/2)
fix()
e não esperava1:n/2+.5
para o trabalho - tantas coisas que podem dar errado, mas eles realmente não fazer :)Java (JDK 10) , 20 bytes
Experimente online!
Porto da resposta Python 2 do TFeld , então dê a eles um voto positivo ! ;)
fonte
QBasic 1.1 , 49 bytes
1 indexado.
fonte
QBasic 1.1 , 30 bytes
Usa o algoritmo do TFeld. Indexado a 0.
fonte
QBasic, 31 bytes
A solução just-implementar-spec vem um pouco mais do que a solução de Erik .
Isso gera indefinidamente. Para fins de execução, recomendo alterar a última linha para algo como
LOOP WHILE INPUT$(1) <> "q"
, o que aguardará um pressionamento de tecla após cada segunda entrada de sequência e sairá se a tecla pressionada forq
.fonte
C # (.NET Core) , 56 bytes
-2 bytes graças a Kevin Crujssen
Experimente online!
1 indexado. Devoluções
a(n)
Ungolf'd:
fonte
i=1;for(;i<n;i++)
pode seri=0;for(;++i<n;)
ei%2==0
pode seri%2<1
.do-while
verificará após concluir a primeira iteração. :)if
com umfor
loop. Por exemplo:if(t>0)for(i=0;i<l;i++)
parafor(i=0;t>0&i<l;i++)
. Eu quase nunca consegui usar isso nas minhas respostas, no entanto.Casca ,
1198 bytesGuardou um byte graças a H.PWiz.
Saída como uma lista infinita.
Experimente online!
Explicação
fonte
Dodos , 69 bytes
Experimente online!
De alguma forma, esta é a resposta mais longa.
Explicação.
fonte
Carvão , 15 bytes
Experimente online! Indexado a 0. Link é a versão detalhada do código. A fórmula provavelmente seria mais curta, mas qual é a graça nisso? Explicação:
fonte
JavaScript,
494845 bytesExperimente online!
Não é tão bonito quanto a resposta @tsh, mas a minha funciona para números maiores.
E agora obrigado @tsh, pela
eval
solução!fonte
<=x+1
pode ser<x+2
x=>eval('for(i=0,r=1;++i<x+2;)r+=i%2?-1:i/2')
deve ser mais curto.eval
o último valor modificado? Ainda não entendo completamente o que isso pode fazer.do
instrução na versão posterior).Abaixo 93, 26 bytes
É executado indefinidamente
Experimente on-line , embora a saída fique um pouco instável e volte depois de x = 256, presumivelmente o TIO não pode manipular caracteres acima de U + 256. Funciona bem em https://www.bedroomlan.org/tools/befunge-playground (apenas Chrome, infelizmente. Com o Firefox, as linhas finais são removidas em tempo de execução, por algum motivo ...)
fonte
J , 17 bytes
Um porto da solução APL da Adám.
Experimente online!
fonte
Pitão , 8 bytes
Retorna o
n
número na sequência, indexada em 0.Experimente onlineExplicação, com exemplo para
n=5
:fonte
Perl 6 ,
3826 bytesTente
Baseado na engenharia reversa, a resposta em Python do TFeld .
Tente
Expandido
38 bytes (gerador de sequência):
Observe que isso tem o benefício que você pode transmitir
*
para obter a sequência inteira ou transmitir um intervalo para gerar mais eficientemente vários valores.26 bytes (cálculo direto):
fonte
05AB1E , 8 bytes
Experimente online!
Com base na abordagem Jelly de Jonathan Allan (que provavelmente foi baseada no OP editando a pergunta com outra definição da sequência), então indexada em 1.
fonte
I
em vez de¹
), mas a abordagem geral e byte-count é exatamente o mesmo:;<LO>IÉ-
Convexo ,
109 bytesExperimente online!
Baseado na abordagem Jelly de Jonathan Allan (que provavelmente foi baseada no OP editando a pergunta com outra definição da sequência). 1 indexado.
Explicação:
fonte
Geléia , 6 bytes
Retorne os primeiros
n
números.Experimente online!
fonte