Entrada:
Inteiro n
que é >=0
ou >=1
( f(0)
é opcional)
Resultado:
O n
'th número na sequência abaixo, OU a sequência até e incluindo o n
' th number.
Seqüência:
(0),1,-1,-3,0,5,-1,-7,0,9,-1,-11,0,13,-1,-15,0,17,-1,-19,0,21,-1,-23,0,25,-1,-27,0,29,-1,-31,0,33,-1,-35,0,37,-1,-39,0,41,-1,-43,0,45,-1,-47,0,49,-1,-51,0,53,-1,-55,0,57,-1,-59,0,61,-1,-63,0,65,-1,-67,0,69,-1,-71,0,73,-1,-75,0,77,-1,-79,0,81,-1,-83,0,85,-1,-87,0,89,-1,-91,0,93,-1,-95,0,97,-1,-99
Como é construída essa sequência?
f(n=0) = 0
(opcional)
f(n=1) = f(0) + n
ou f(n=1) = 1
f(n=2) = f(1) - n
f(n=3) = f(2) * n
f(n=4) = f(3) / n
f(n=5) = f(4) + n
etc.
Ou no pseudo-código:
function f(integer n){
Integer result = 0
Integer i = 1
Loop as long as i is smaller than or equal to n
{
if i modulo-4 is 1:
result = result plus i
if i modulo-4 is 2 instead:
result = result minus i
if i modulo-4 is 3 instead:
result = result multiplied with i
if i modulo-4 is 0 instead:
result = result integer/floor-divided with i
i = i plus 1
}
return result
}
Mas como você deve ter notado, existem dois padrões na sequência:
0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,0, ,-1, ,...
,1, ,-3, ,5, ,-7, ,9, ,-11, ,13, ,-15, ,17, ,-19,...
portanto, quaisquer outras abordagens que resultem na mesma sequência também são completamente boas.
Regras do desafio:
- Entradas indexadas a 0 e indexadas a 1 resultarão no mesmo resultado (é por isso que
f(0)
é opcional para entradas indexadas em 0 se você deseja incluí-las). - Você tem permissão para emitir o
n
'número th desta sequência. Ou a sequência inteira acima e incluindo on
'número th. (Portanto,f(5)
pode resultar em um5
ou0,1,-1,-3,0,5
.)- Se você optar por imprimir a sequência até o
n
número número um, o formato de saída será flexível. Pode ser uma lista / matriz, sequência delimitada por vírgula / espaço / nova linha ou ser impressa em STDOUT, etc.
- Se você optar por imprimir a sequência até o
- A divisão (
/
) é a divisão inteiro / piso, que arredonda para 0 (não para o infinito negativo, como é o caso em alguns idiomas).
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 necessário.
Casos de teste adicionais acima n=100
:
Input Output
1000 0
100000 0
123 -123
1234 -1
12345 12345
123456 0
Respostas:
JavaScript (ES6), 19 bytes
Experimente online!
Prova
Vamos supor que temos as seguintes relações para alguns n múltiplos de 4. Essas relações são trivialmente verificadas para os primeiros termos da sequência.
E deixe N = n + 4 . Então, por definição:
O que, por indução matemática, prova que as relações são válidas para qualquer N múltiplo de 4 .
fonte
n%4
depois, para que funcione com números maiores que 32 bits.05AB1E , 8 bytes
Mostra o
nth
númeroExperimente online!
05AB1E , 14 bytes
Produz uma lista de números até N usando os padrões na sequência
Experimente online!
Explicação
Exemplo usando N = 7
fonte
Python 2 , 25 bytes
Resposta de Port of Arnauld:
Experimente online!
Soluções ingênuas:
Python 3 ,
5049 bytesExperimente online!
Python 2 ,
78777658575352 bytesExperimente online!
Utilizou um monte de bytes
int
, porque o piso python se divide, e não em direção a0
, como na pergunta.fonte
J , 12 bytes
Resposta de Port of Arnauld:
Experimente online!
J , 28 bytes
Solução ingênua:
Emite o enésimo número
Experimente online!
fonte
TIS
-n
2
1
, 123 bytesEmite o
n
número th para0 <= n <= 999
. (O limite superior é devido a limitações de idioma).Experimente online!
TIS
-n
2
1
, 124 bytesEmite o
n
número th para0 <= n <= 999
. (O limite superior é devido a limitações de idioma). Múltiplosn
podem ser fornecidos, separados por espaços em branco.Experimente online!
TIS
-n
3
1
, 192 bytesEmite os valores para
0..n
para0 <= n <= 999
. (O limite superior é devido a limitações de idioma).Experimente online!
Todos usam E / S numérica (o
-n
sinalizador). As duas primeiras soluções usam dois nós de computação, um posicionado acima do outro. O terceiro possui uma pilha de três nós.Nas duas primeiras soluções, o nó superior lê a entrada, envia o número original e subtrai repetidamente 4 até ficarmos negativos, depois adiciona 5 ao índice da nossa tabela de salto. Isso é equivalente a
(n % 4) + 1
.A terceira solução dividiu essa tarefa em dois nós; o primeiro repete o limite até o final dos tempos, e o nó do meio conta em paralelo o índice (comparado com esse limite) e o módulo como acima.
O nó inferior das três soluções é o mesmo; tem uma mesa de salto, e é aí que a mágica acontece. Nós armazenamos o número original
ACC
, em seguida,JRO
(provavelmente J UMP R elative O ffset) para a frente por1
,2
,3
ou4
, dependendo do que o nó acima diz.Trabalhando para trás:
4
vai a )NEG
comeuACC
, e b ) se moverACC
para baixo para a saída.3
vai colocar1
emACC
, em seguida, execute os passos4
a e4
b .2
pulará diretamente para o passo4
b .1
vaiSUB
tratoACC
off em si (efetivamente zeroingACC
), em seguida, fazer o passo2
, que salta para4
b .fonte
C (gcc) , 62 bytes
Experimente online!
fonte
f(n){n=n%2>0?n*(2-n%4):n%4/-2;}
eu a adicionaria como segunda resposta, porque também gosto da sua abordagem recursiva. :)Geléia , 8 bytes
Experimente online!
-1 graças a Lynn .
O que os outros estão fazendo (porta da solução da Arnauld), suporta
0
.Gelatina , 17 bytes
Experimente online!
0
não é suportado.fonte
Java (JDK 10) , 25 bytes
Experimente online!
Mais curto que o algoritmo contendor em outros idiomas com 28 bytes
Experimente online!
fonte
Retina , 46 bytes
Experimente online! Explicação:
Converta para unário.
Converta de volta para decimal, mas deixe
n%4+1
sublinhados.No caso de 4, o resultado é
-n
.Caso 3:
-1
Caso 2:
n
Caso 1:
0
fonte
Haskell , 50 bytes
Experimente online!
A solução de Arnauld, portada para Haskell, tem 23 bytes:
fonte
APL (Dyalog Classic) ,
2212 bytes10 bytes maciços salvos devido às observações de Erik the Outgolfer. Obrigado!
Experimente online!
Emite o enésimo número
Não conheço o APL, apenas tentei fazer com que minha porta J da solução de Arnauld funcionasse no Dyalog APL.
fonte
(0,⍵,¯1,-⍵)
por(0⍵¯1,-⍵)
. 2) Você pode remover o1+
assumindo que a⎕IO
variável do sistema está atribuída0
(sim, isso é permitido). 3) Normalmente, não contamos af←
parte ao enviar funções. 4) Você pode usar a⊃
função em vez de[]
indexar. Todos aqueles juntos formam o seguinte:⎕IO←0
(não conte isso){(4|⍵)⊃0⍵¯1,-⍵}
4∘|⊃0,⊢,¯1,-
.4∘|⊃0,⊢,¯1,-
é exatamente o que minha solução J4&|{0,],_1,-
seria no APL. Obrigado novamente!Cubix ,
2019 bytesExperimente online!
Portos a mesma abordagem para cubix.
Em um cubo:
O primeiro bit
^Iu:n>s1ns:u0s
cria a pilha e, em seguida,3at
copia o item apropriado para o TOS,O
emite e@
termina o programa.fonte
Espaço em branco,
8483 bytesLetras
S
(espaço),T
(guia) eN
(nova linha) adicionadas apenas como destaque.[..._some_action]
adicionado apenas como explicação.Experimente online (apenas com espaços brutos, guias e novas linhas).
Porto da resposta JavaScript de @Arnauld .
Explicação (exemplo de entrada
n=7
):Para com erro: Saída não definida.
fonte