Introdução
O sinal de um número é a +
ou a -
para cada número inteiro diferente de zero. O próprio zero é sem sinal ( +0
é o mesmo que -0
). Na sequência a seguir, alternaremos entre o sinal positivo , o zero e o negativo . A sequência começa com 1
, então escrevemos 1
com um sinal positivo, com zero (este é estranho, mas multiplicamos o número por 0) e o sinal negativo:
1, 0, -1
O próximo número é 2
e fazemos a mesma coisa novamente:
2, 0, -2
A sequência é eventualmente:
1, 0, -1, 2, 0, -2, 3, 0, -3, 4, 0, -4, 5, 0, -5, 6, 0, -6, 7, 0, -7, ...
Ou uma forma mais legível:
a(0) = 1
a(1) = 0
a(2) = -1
a(3) = 2
a(4) = 0
a(5) = -2
a(6) = 3
a(7) = 0
a(8) = -3
a(9) = 4
...
A tarefa
Dado um número inteiro não negativo n , a saída do n th termo da sequência acima. Você pode escolher se usa a versão indexada a zero ou indexada .
Casos de teste:
Indexado a zero:
a(0) = 1
a(11) = -4
a(76) = 0
a(134) = -45
a(296) = -99
Ou se você preferir um indexado:
a(1) = 1
a(12) = -4
a(77) = 0
a(135) = -45
a(297) = -99
Isso é código-golfe , então a submissão com o menor número de bytes vence!
[0, 0, 0, -1, 0, 1...
1
.Respostas:
Geléia, 7 bytes
Indexado a zero. Casos de teste aqui.
Explicação:
fonte
JavaScript ES6, 18 bytes
Acabou sendo muito parecido com a resposta do @ LeakyNun, mas eu não a vi até depois de postar a minha.
Explicação e Ungolfed
-~
é uma abreviaçãoMath.ceil
ou arredondamento para:Mostrar snippet de código
fonte
Math.ceil
e-~
são diferentes;Math.ceil(1) == 1
Considerando que-~1 == 2
n=>~(n/3)*~-(n%3)
MarioLANG,
9381 bytesindexado um
Experimente Online
Explicação:
começamos tomando a imputação
que nos dão
decrementamos o byte esquerdo e incrementamos o byte direito com
acabamos com
então montamos o loop
o loop irá até a memória parecer
então precisamos apenas produzir o resultado
fonte
;(
e>:(
. Embora, duas vezes[<:
possam ser consideradas um pouco felizes. ; PPython 2, 24 bytes
Programa completo:
fonte
MATL,
1512 bytesIsso usa uma indexação baseada.
Experimente online! ou verificar casos de teste
Explicação:
fonte
Q3/Xk-1:1G_)*
pode funcionar melhor. Provavelmente, pode ser modificado ainda mais para indexação baseada em 1.Haskell, 27 bytes
Solução de 28 bytes um pouco mais interessante:
(Ambos são
0
indexados)fonte
MATL , 8 bytes
O resultado é baseado em 1.
Experimente online!
Explicação
Isso cria a matriz 2D
e, em seguida, usa a indexação linear para extrair o termo desejado. Linear meios de indexação índice para baixo, em seguida, através de (portanto na matriz acima das primeiras entradas na ordem linear são
1
,0
,-1
,2
,0
, ...)fonte
Perl 5, 22 bytes
21 mais um para
-p
:Usa indexação baseada em 1.
Explicação:
-p
define a variável$_
igual à entrada. O código então o define igual ao$_%3
th elemento, dividido por 3, da lista baseada em 0(-$_,$_+2)
(onde%
está o módulo). Observe que se$_%3
for dois, não existe esse elemento e a divisão subsequente por 3 numera o indefinido para 0. e-p
depois imprime$_
.fonte
Bash,
2825 bytesfonte
Perl 6 ,
2623 bytes(O menor foi traduzido de outras respostas)
Explicação (da primeira):
Teste:
fonte
J,
1915 bytesProvavelmente precisa jogar golfe ainda mais ...
1 indexado.
Ungolfed:
Onde
>>
significa entrada (STDIN) e<<
significa saída (STDOUT).fonte
Pyke,
87 bytes (versão antiga)Experimente aqui! - Observe que o link provavelmente não vai durar muito
Versão mais recente
Experimente aqui!
fonte
J, 27 bytes
Embora não seja o jogador de golfe, eu gosto mais, pois usa uma agenda.
Aqui está a decomposição da árvore:
Isso é muito semelhante à resposta J de Kenny, na medida em que escolhe a magnitude e o sinal, mas é diferente no fato de eu usar uma agenda para escolher o sinal.
fonte
MATL, 8 bytes
Esta solução usa a indexação baseada em 1 na sequência.
Experimente Online
Versão modificada mostrando todos os casos de teste
Explicação
fonte
Pitão, 10 bytes
Experimente online!
Explicação:
Nota: Eu assumi a sequência indexada a zero.
fonte
*@(1ZtZ)%Q3h/Q3
(1ZtZ)
=-L1 2
Na verdade, 10 bytes
Experimente online!
Explicação:
fonte
05AB1E, 7 bytes
Código:
Explicado:
fonte
GeoGebra, 44 bytes
onde
n
é um indexado.Explicação:
Não é necessário gerar todos os trigêmeos
{n, 0, -n}
, mas é mais curto que escreverceil(n/3)
ou algo nesse sentido. Observe quen
deve ser definido para criar este objeto (se não estiver definido no momento em que for executado, o GeoGebra solicitará que você crie um controle deslizante paran
).fonte
n
, digite algo comon=297
(isso fornecerá um controle deslizante que está configurado muito bem). Em seguida, cole a fórmula na caixa Entrada, que agora deve estar abaixo don
. (Certifique-se de pressionar return;) A fórmula deve ser avaliada até on
termo da sequência e deve mudar quando você move o controle deslizante.Labirinto ,
171514 bytesEconomizou 3 bytes usando a ideia de Sok de usar em
1-(n%3)
vez de~(n%3-2)
.O programa termina com um erro (divisão por zero), mas a mensagem de erro vai para STDERR.
Experimente online!
Explicação
O programa é completamente linear, embora algum código seja executado ao contrário no final.
O ponteiro de instruções agora atinge um beco sem saída e gira, então começa a executar o código a partir do final:
fonte
Erlang, 40 bytes
Infelizmente, Erlang não tem operador de módulo '%' e 'rem' requer os espaços, mesmo antes do 3.
fonte
Hexagonia , 25 bytes
Ou, em formato não minificado:
Experimente online!
Minha primeira incursão no Hexagony, por isso tenho certeza de que não fiz isso de maneira tão eficiente quanto poderia ser ...
Calcula
-(n%3 - 1)
em uma borda da memória,n/3 + 1
em uma borda adjacente e depois as multiplica.fonte
R, 28 bytes
Parece que esta é uma variação da maioria das respostas aqui. Baseado em zero.
O bom disso é que ele lida com várias entradas
Originalmente, eu queria fazer o seguinte, mas não conseguia cortar os bytes extras.
Usa
rbind
para adicionar zeros e negativos a um intervalo de 1 paran
retornar on
'ésimo termo (um baseado).fonte
Lote (Windows), 86 bytes
Alternate.bat
Este programa é executado como
Alternate.bat n
onden
é o número que deseja chamar a função.fonte
APL, 12 caracteres
0 3⊤
é APLdivmod 3
.fonte
Java 7,
383736 bytesMeu primeiro golfe, seja gentil
Experimente aqui! (casos de teste incluídos)
Edit: Eu contei mal e também joguei fora mais um personagem substituindo
(-i%3+1)
por(1-i%3)
.fonte
return
e usar um Java 8 lambda.Retina, 45 bytes
Experimente online!
Suíte de teste.
Leva entrada / saída na base dez. 1 indexado.
Entrada unária, saída da base dez, indexada 1: 40 bytes
Experimente online!
Suíte de teste.
fonte
MATLAB / oitava, 27 bytes
Isso cria uma função anônima que pode ser chamada usando
ans(n)
. Esta solução usa indexação baseada em 1.Todos os casos de teste
fonte
Mathematica 26 bytes
Com 4 bytes salvos, graças a Martin Ender.
Usa a mesma abordagem que Suever.
fonte
Oitava, 23 bytes
Sem confortos modernos ...
Usa mágica de indexação baseada em 1.
Explicação
Cria uma função anônima que irá:
Após a etapa de multiplicação, teremos uma matriz 3xn assim (para n = 12):
Criar
n
colunas é um exagero, mas é um número conveniente que é garantido que seja grande o suficiente. A indexação linear conta cada coluna da esquerda para a direita, portanto o elemento no índice linear4
seria2
.Todos os casos de teste em ideone .
fonte
dc, 10
Usa indexação baseada em 1.
fonte