Dado N, imprima o termo enésimo desta sequência infinita:
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ... etc.
N pode ser indexado em 0 ou 1 como desejar.
Por exemplo, se 0-indexados então entradas 0
, 1
, 2
, 3
, 4
deve produzir saídas respectivas -1
, 2
, -2
, 1
, -3
.
Se um indexados então entradas 1
, 2
, 3
, 4
, 5
deve produzir saídas respectivas -1
, 2
, -2
, 1
, -3
.
Para ficar claro, essa sequência é gerada tomando a sequência de números inteiros positivos repetida duas vezes
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 ...
e reorganizando cada par de números ímpares para cercar os números pares logo acima
1 2 2 1 3 4 4 3 5 6 6 5 7 8 8 7 9 10 10 9 11 12 12 11 ...
e, finalmente, negando todos os outros termos, começando com o primeiro
-1 2 -2 1 -3 4 -4 3 -5 6 -6 5 -7 8 -8 7 -9 10 -10 9 -11 12 -12 11 ...
O código mais curto em bytes vence.
1,1,2,2,3,3,4,4,...
mas aqui está1,2,2,1,3,4,4,3,...
.Respostas:
Python 2 , 23 bytes
Entradas ímpares fornecem aproximadamente
n/2
, mesmo as aproximadamente-n/2
. Então, comecei-n/2+n%2*n
e aprimorei a partir daí.Experimente online!
fonte
Mathematica, 29 bytes
Função pura recebendo uma entrada indexada em 1. Além dos sinais alternados
(-1)^#
, duas vezes a sequência está próxima da entrada, as diferenças sendo 1, 2, 1, -2 ciclicamente. É bom que#~GCD~4
, o maior divisor comum da entrada e4
, seja 1, 2, 1, 4 ciclicamente; então substituímos manualmente4->-2
e chamamos de dia. Eu gosto dessa abordagem porque evita a maioria dos comandos do Mathematica com muitos caracteres.fonte
Pip ,
2422 bytesRecebe entrada, indexada em 1, como um argumento de linha de comando. Experimente online ou verifique 1-20 .
Explicação
Observe que a sequência pode ser obtida combinando três outras seqüências, uma indexada a zero e as outras indexadas:
0 0 0 0 2 2 2 2 4 4 4 4
=a//4*2
(indexado 0);1 2 2 1 1 2 2 1 1 2 2 1
=aBA2|1
, ondeBA
é AND bit a bit e|
é OR lógico (indexado a 1);-1 1 -1 1 -1 1 -1 1 -1 1 -1 1
=(-1)**a
(indexado a 1).Se começarmos com o
a
índice 1, podemos calcular primeiro as partes indexadas em 1 (lendo a expressão da esquerda para a direita) e depois diminuira
para a parte indexada em 0. Usando a variável embutidav=-1
, obtemosPara raspar mais dois bytes, precisamos usar alguns truques de manipulação de precedência. Podemos eliminar os parênteses internos substituindo
+
por+:
(equivalente a+=
muitos idiomas). Qualquer operador de computação e atribuição tem uma precedência muito baixa, portantoaBA2|1+:--a//4*2
é equivalente a(aBA2|1)+:(--a//4*2)
. O Pip emitirá um aviso sobre a atribuição a algo que não é uma variável, mas apenas se tivermos avisos ativados.A única coisa que tem precedência mais baixa do que
:
éY
, o operador yank. * Atribui o valor do seu operando ày
variável e o passa inalterado; para que também possamos eliminar os parênteses externos, puxando o valor em vez de parênteses:YaBA2|1+:--a//4*2
.* rint
P
eO
utput têm a mesma precedência queY
ank, mas não são úteis aqui.fonte
Geléia ,
87 bytesIsso usa o algoritmo da minha resposta Python , que foi melhorada significativamente pelo @GB .
Experimente online!
Como funciona
fonte
¡
)Java 8, 19 bytes
Java 7,
4737 bytesO Java pela primeira vez (8) realmente compete e é mais curto do que algumas outras respostas. Ainda não consegue vencer as línguas de golfe reais, como Jelly e similares (duhuh .. que surpresa ..>.>; P)
Porta indexada a 0 da resposta Python 2 do @Xnor .
-10 bytes graças a @GB
Experimente aqui.
fonte
Geléia ,
151211 bytesExperimente online!
Como funciona
fonte
RProgN 2 ,
312522 bytesExplicado
Experimente online!
fonte
Ruby,
26 2318 bytesBaseado em 0
-3 bytes roubando a idéia -1 ^ n de Greg Martin , Dennis e talvez outra pessoa; depois, -5 bytes roubando a idéia n | 2 do xnor .
fonte
Empilhados ,
3028 bytesExperimente online! Retorna uma função, conforme permitido por meta consenso. . Recebe entrada do topo da pilha.
Usando a mesma abordagem que a resposta do RProgN 2 .
Como alternativa, 46 bytes. Experimente online! :
Este gera o intervalo, seleciona e nega o membro, conforme apropriado.
fonte
Python 2 ,
443327 bytesGraças a @GB por jogar fora 6 bytes!
Experimente online!
fonte
05AB1E, 8 bytes
Experimente online
Explicação
fonte
¹F(
parece caro para "se estranho, negar".n
, para o poder de1/n
.Geléia ,
98 bytesExperimente online!
-1 graças a Dennis . Duh conversões flutuantes.
Usa a abordagem Python 2 do @ xnor.
EDIT : > _>
fonte
|2×Ḃ+H~$
salva um byte. tio.run/nexus/jelly#AR0A4v//fDLDl@G4gitIfiT/...CJam , 16 bytes
Entrada baseada em 1.
Experimente online!
Explicação
Aqui está um detalhamento do código com os valores na pilha para cada entrada de
1
até4
. Os primeiros comandos afetam apenas os dois bits menos significativos,n-1
portanto4
, esse material se repete ciclicamente, com os resultados incrementados em 2, devido à metade.fonte
Perl 6 ,
55 27 2422 bytes(Inspirado na
zipWith
resposta de Haskell )Experimente
(Inspirado em várias respostas)
Experimente
Tente
Tente
Expandido:
(Todos são baseados em 0)
fonte
Haskell ,
3736 bytesExperimente online! Esta é uma função anônima que pega um número
n
como argumento e retorna 0-indexado on
elemento th da sequência.fonte
Haskell, 56 bytes
Indexado a 0
fonte
Perl 5 47 + 1 (para sinalizador) = 48 bytes
Envio antigo 82 bytes
Execute assim:
fonte
print +((
e removendo o final)
. E mais dois usandosay
e-E
. E também mais um fazendo, em($_%4&1||-1)
vez do ternário.JavaScript (ES7), 28 bytes
1 indexado. Ainda não procurei outras respostas, então não sei se esse é o melhor algoritmo, mas suspeito que não.
fonte
JavaScript,
2822 bytesObrigado @ETHproductions por jogar fora 6 bytes
Experimente online!
fonte
f=x=>x%2?~x>>1:x/2+x%4-1
funcionaria?dc , 98 bytes
Nossa, essa é a resposta mais longa aqui, principalmente porque eu segui o caminho de gerar o valor absoluto de cada elemento da sequência, um por um, com base na seguinte fórmula recursiva:
então produzindo
(-1)^n * a_n
, , em vez de computar diretamente on
'ésimo elemento. De qualquer forma, isso é1
indexado.Experimente online!
fonte
R, 38 bytes
Explicação
fonte
TI-Basic (TI-84 Plus CE), 31 bytes
O TI-Basic é um idioma tokenizado e cada token usado aqui tem um byte, exceto
remainder(
dois.Isso usa a versão indexada em 1.
Explicação:
Há um padrão que se repete a cada quatro números. Na versão indexada em 1, é: - (x + 1) / 2, (x + 1) / 2, - (x + 1) / 2, (x-1) / 2 para o valor de entrada x. Isso pode ser representado como uma função definida por partes.
f (x) = - (x + 1) / 2 se x ≡ 1 mod 4; (x + 1) / 2 se x ≡ 2 mod 4; - (x + 1) / 2 se x ≡ 3 mod 4; (x-1) / 2 se x ≡ 0 mod 4
Como as partes "x ≡ 1 mod 4" e "x ≡ 3 mod 4" são as mesmas, podemos combiná-las em "x ≡ 1 mod 2".
Agora, a função por partes é:
f (x) = - (x + 1) / 2 se x ≡ 1 mod 2; (x + 2) / 2 se x ≡ 2 mod 4; (x-2) / 2 se x ≡ 0 mod 4
É aqui que começo a dividi-lo em comandos reais. Como o valor é positivo para índices pares e negativo para índices ímpares, podemos usar (-1) ^ x. No entanto, no TI-Basic
i^(2X
(5 bytes) é menor que(-1)^Ans
(6 bytes). Observe que parênteses são necessários devido à ordem das operações.Agora que temos o caminho de negar as entradas ímpares do caminho, passamos aos mods (adicionando a negação novamente mais tarde). Eu fiz o caso de uma entrada ímpar o padrão, então começamos com
.5(Ans+1)
.Para corrigir o caso da entrada par, basta adicionar um ao número entre parênteses, mas apenas quando x ≡ 0 mod 2. Isso pode ser representado como
.5(Ans+1+remainder(Ans+1,2))
ou.5(Ans+1+not(remainder(Ans,2)))
, mas eles têm a mesma contagem de bytes, portanto, não importa qual.Para consertar o caso da entrada múltipla de 4, precisamos subtrair 3 do número entre parênteses, mas também outra 1 porque todos os múltiplos de 4 são pares, o que adicionaria um da etapa anterior, portanto, agora temos
.5(Ans+1+remainder(Ans+1,2)-4not(remainder(Ans,4)))
.Agora, basta seguir a parte que determina os sinais até o final para obter o programa completo.
fonte
Entre 93, 25 bytes
Indexado a zero
Experimente Online!
O número é dado por
((2(n / 4) + 1) + !!((n % 4) % 3)) * (2(n % 2) - 1)
fonte
QBIC , 53 bytes
Explicação:
fonte
Sábio , 19 bytes
Experimente Online!
Este é apenas um porto da resposta do @Dennis 'Jelly para o Wise.
fonte
Q, 52 bytes
0 solução indexada.
fonte