Seu desafio hoje é produzir um determinado termo de uma sequência enumerando todos os números inteiros. A sequência é a seguinte: Se temos uma função indexada em 0 gerando a sequência f(n)
e ceil(x)
é a função de teto, então f(0) = 0
; abs(f(n)) = ceil(n/2)
; sign(f(n))
é positivo quando n
e ceil(n/2)
são pares ou ímpares.
Para ajudar a entender essa sequência, os primeiros termos são os seguintes: 0 1 -1 -2 2 3 -3 -4 4 5 -5 -6 6 7 -7...
Sua tarefa é escrever um programa que use um número inteiro n
e produza o n
termo th da sequência. A entrada pode ser indexada apenas em 0 ou 1.
Casos de teste (indexados 0):
0 => 0
1 => 1
2 => -1
3 => -2
4 => 2
5 => 3
Isso é código-golfe , o menor número de bytes vence!
Respostas:
SOGL V0.12 ,
86 bytesExperimente aqui! ou tente os primeiros números (alterados um pouco para que funcionem)
indexados em 0.
Explicação:
Ou mais simples:
fonte
».»
estou no telefoneI».»⌡±
.Python 2 ,
2624 bytesExperimente online!
fonte
-~-(x&2)
o denominador final.JavaScript (ES6), 18 bytes
1 indexado.
Demo
Mostrar snippet de código
fonte
C, 25 bytes
fonte
f(n){n=~n/2*~-(n&2);}
gcc -O0
o x86-64 compila a versão do @ cleblanc com instruções que deixam o resultado da multiplicação emeax
( godbolt.org/g/dztKPV ), mas seria umax86-64 gcc -O0
resposta, não uma resposta em C. Eu não voto C respostas que quebram com a otimização ativada, especialmente a última expressão estúpida como porcaria de valor de retorno. Mesmo se é assim que o gcc funciona, não é assim que o C funciona.Haskell , 26 bytes
Experimente online!
As outras respostas de Haskell parecem complicar demais as coisas… ^^
fonte
Pyke , 6 bytes
Experimente aqui!
Usa a abordagem de dzaima ...
BeatsTies Jelly!Explicação
Os bytes codificado-hex equivalentes seria:
68 65 51 65 56 5F
.fonte
Gelatina , 6 bytes
Experimente online!
Usa o algoritmo do dzaima.
-1 graças a Jonathan Allan .
fonte
Python 2 , 21 bytes
Experimente online!
fonte
Mathematica, 24 bytes
-14 bytes de @Misha Lavrov
fonte
Boole
eOddQ
tem o efeito de converter números ímpares em 1 e números pares em 0, mas você não precisa disso aqui: potências de -1 fornecem a resposta certa para todos os números ímpares. Então você pode reduzir esse passo para(-1)^Tr@{#,s}
ou apenas(-1)^(#+s)
.Haskell ,
254342 bytesExperimente online! 1 indexado.
Edit: A versão anterior tinha os sinais em uma ordem errada, graças a @ Potato44 por apontar. Corrigido por 18 bytes ...
Edit 2: Graças ao BMO por -1 byte!
fonte
Python 3 , 29 bytes
Experimente online!
fonte
(-1)**(n%4>1)
é uma maneira bastante complicada de escrever(1-(n&2))
;)Pitão , 9 bytes
Experimente aqui!
Usa a abordagem do dzaima .
fonte
Haskell, 36 bytes
Experimente online!
fonte
05AB1E , 6 bytes
Experimente online!
Usa o algoritmo do dzaima.
fonte
Lote, 29 bytes
fonte
JavaScript (ES6), 18 bytes
Indexado a 0.
fonte
Javascript, 17 bytes
Mostrar snippet de código
Este é 0 indexado. É um truque inteiramente a bit.
fonte
Cubicamente , 23 bytes
(Indexado 1)
Experimente online!
A principal dificuldade ao escrever código no Cubically são:
Então, esta solução calcula
onde
/
denota divisão inteira. Isso precisa apenas de 1 variável temporária e as constantes 1 e 2.Explicação:
fonte
TI-Basic (TI-84 Plus CE), 20 bytes
Um programa completo chamado como
5:prgmNAME
.O TI-Basic é uma linguagem tokenizada , todos os tokens usados aqui são de um byte, exceto
remainder(
dois.‾
representa o token regativo, digitado com a (-)chaveExemplos:
Explicação:
Mesma fórmula que uma função Y-var:
fonte
dc , 16 bytes
Tenho certeza de que há uma maneira de reduzir 0..1 a -1..1 em dc, mas não há ideias por enquanto.
Experimente online!
fonte
Java 8, 15 bytes
EDIT: Java é realmente a menor das linguagens não-golfe ?! o.Ô
Explicação:
Experimente aqui.
Vou usar a tabela abaixo como referência do que está acontecendo.
~n
é igual a-n-1
.~n/2
resultará na sequência0,-1,-1,-2,-2,-3,-3,-4,-4,-5,-5,...
n&2
resultará em0
ou2
, na sequência0,0,2,2,0,0,2,2,0,0,2,...
~-x
é igual a(x-1)
, então~-(n&2)
(((n&2)-1)
) resulta na sequência-1,-1,1,1,-1,-1,1,1,-1,-1,1,...
~n/2
e~-(n&2)
dá é a sequência correta solicitada no desafio:0,1,-1,-2,2,3,-3,-4,4,5,-5,...
Tabela de visão geral:
fonte
Flacidez Cerebral ,
86747270 bytesExperimente online!
Explicação
Existem duas partes nesse código. A primeira parte
faz o esforço da computação. Ele determina
ceil(n/2)
e se deve ou não negar a saída.Para explicar como funciona, primeiro explicarei como calcular
ceil(n/2)
. Isso pode ser feito com o seguinte códigoIsso é decrescente de n cada vez que ele executa um not (
([{}]())
) em um contador e adiciona o contador a um resultado. Como o contador é zero na metade do tempo, apenas incrementamos todas as outras execuções, começando pela primeira.Agora também quero calcular o sinal de nossos resultados. Para fazer isso, começamos outro contador. Este contador só muda de estado se o primeiro contador estiver desativado. Dessa forma, obtemos o padrão desejado. Colocamos esses dois contadores na pilha para facilitar a movimentação quando chegar a hora.
Agora que terminamos esse cálculo, nossa pilha fica assim
Então, precisamos trabalhar para obter o resultado pretendido nesta segunda parte.
fonte
Perl 5 , 32 + 1 (
-p
) = 33 bytesExperimente online!
fonte
Próton , 23 bytes
Experimente online!
Solução do porto de Halvard .
Próton , 23 bytes
Experimente online!
Solução do Porto de Leaky .
Um pouco mais protônico, 24 bytes:
fonte
QBIC ,
2726 bytesExplicação
fonte
Clojure 122 bytes
Detalhado, mesmo quando jogado. Eu estou indo para o voto de simpatia aqui ... :-)
Golfe:
Ungolfed:
fonte
Excel VBA de 32 bits,
3937 bytesFunção de janela imediata VBE anônima que recebe entrada da célula
A1
e sai para a janela imediata VBERestrito a 32 bits, pois
A^B
não é válido em 64 bits (A ^B
é o mais próximo possível)fonte
(-1)
e é^[Int
necessário?Julia 0,6 , 16 bytes
É apenas a solução java, exceto que eu preciso
÷
para a divisão inteira.Experimente online!
fonte