Escreva um programa ou função que, dado que n ≥ 1, retorne o número de soluções para ± 1 ± 2 ± 3 ± ... ± n = 0.
Para n = 6, não há soluções, então a resposta é 0. Para n = 4, existem duas soluções, então a resposta é 2 (as duas soluções são 1 - 2 - 3 + 4 = -1 + 2 + 3 - 4 = 0).
Essa é a sequência OEIS A063865 . Alguns exemplos de entrada / saída são:
n a(n)
1 0
2 0
3 2
4 2
5 0
6 0
7 8
8 14
9 0
10 0
11 70
12 124
13 0
14 0
15 722
16 1314
O menor código em bytes vence.
code-golf
math
arithmetic
orlp
fonte
fonte
Respostas:
JavaScript (ES6), 35 bytes
Guardado 1 byte graças a @tsh
Experimente online!
fonte
Wolfram Language (Mathematica) , 33 bytes
Conta os
n
-tuplos de 1 e -1 cujo produto de pontoRange[n]
é 0.Experimente online!
fonte
Haskell , 42 bytes
Experimente online!
Isso é
21 byte menor que qualquer função recursiva que eu possa escrever.fonte
05AB1E , 10 bytes
Experimente online!
Explicação
fonte
O_O
...C (gcc),
45625250 bytesPorto de Kevin Cruijssen's Java 8 answer .
Experimente online aqui .
Observe que, devido às melhorias sugeridas nos comentários, o código produz um comportamento indefinido a ponto de não funcionar quando compilado com clang.
Graças ao eteno por jogar 3 bytes. Obrigado a Kevin Cruijssen por jogar mais 10 bytes. Agradecimentos a Christoph por jogar outros 2 bytes.
Versão não destruída:
fonte
r?0:1
por!r
. 42 bytesr
, o que não é permitido.n=
não é necessário ou:f(n,r){n=n?f(n-1,r+n)+f(n-1,r-n):!r;}F(n){f(n,0);}
.-x = ~x+1
e portanto~x = -x-1
.05AB1E ,
98 bytesGraças a Emigna por salvar um byte!
Código:
Usa a codificação 05AB1E . Experimente online!
Explicação
fonte
MATL ,
1413 bytesObrigado a @ Giuseppe por economizar 1 byte!
Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere
n = 3
como um exemplo. A pilha é mostrada de cabeça para baixo, ou seja, a mais nova aparece abaixo.fonte
Geléia , 8 bytes
Experimente online!
Como funciona
fonte
Python 2, 74 bytes
Mais uma submissão divertida, cálculo direto da função geradora.
fonte
Oitava (com pacote de comunicações), 39 bytes
Experimente online!
Explicação:
Pegue um intervalo 0 ... n ^ 2-1 e converta-o em binário. Isso fornece uma matriz com todas as combinações de 0 e 1 . Multiplique por 2 e subtraia 1 para obter uma matriz com todas as combinações de -1 e +1 .
Pegue o produto escalar com um intervalo de 1 ... n para obter todas as combinações de ± 1 ± 2 ... ± n . Conte quantos são zero.
Basicamente, a mesma coisa, a mesma contagem de bytes:
fonte
APL (Dyalog) ,
3122 bytes9 bytes salvos graças a @ H.PWiz
Experimente online!
fonte
Python 2 e 3, 50 bytes
Abordagem recursiva como a maioria das respostas:
Experimente online
A chamada recursiva dupla leva muitos bytes ... Provavelmente existe uma maneira de simplificá-la.
fonte
Java 8,
727170 bytesPorto da resposta JavaScript (ES6) de @Arnauld .
-2 bytes graças a @ OlivierGrégoire .
Experimente online.
Explicação:
fonte
Haskell , 55 bytes
Uma abordagem direta de calcular todas essas somas e verificar quantas são zero.
Experimente online!
EDIT: @ H.PWiz tem uma solução mais curta e muito mais elegante usando
mapM
!fonte
BaterUtilitários + GNU, 63 bytes
Provavelmente, o Bash pode se sair melhor com funções recursivas, mas não consigo resistir a esse tipo de
eval
monstruosidade / escape / expansão:Experimente online!
Atualização: Eu não acho que o bash pode fazer melhor com funções recursivas. É o melhor que posso fazer por 90 pontos .
eval
diabos é então.fonte
Braquilog , 12 bytes
Experimente online!
Explicação
fonte
Oitava , 42 bytes
Experimente online!
fonte
J , 32 bytes
Experimente online!
Certamente há muito espaço para jogar golfe. A expansão seguirá.
fonte
Haskell , 41 bytes
Experimente online!
fonte
0^abs k
.Gelatina , 10 bytes
Experimente online!
fonte
Perl 5 ,
-p
35 bytesExperimente online!
fonte
Pari / GP , 30 bytes
Experimente online!
fonte
Prolog (SWI) , 99 bytes
Experimente online!
fonte
Pitão,
1413 bytesExperimente aqui
Explicação
fonte
CJam , 25 bytes
Experimente online!
Esta é uma tradução bastante direta da solução 05AB1E da @ emigna. É certamente jogável.
fonte
Stax , 9 bytes
Execute e depure
Uma das respostas mais curtas até agoraderrotadas por Jelly.Eu sinto que verificar explicitamente quais sinais somam a zero não é muito positivo, então, em vez disso, pego o conjunto de potências e verifico quantos conjuntos no conjunto de potências têm a soma da metade do enésimo número triangular. Esse método é, não surpreendentemente, da mesma complexidade de tempo que verifica quais sinais somam zero.
Equivalente ASCII:
fonte
Pitão , 10 bytes
Experimente online. Como alternativa, verifique todos os casos de teste de uma só vez .
Explicação:
fonte
J , 28 bytes
Usa a outra definição do OEIS em que
a(n) = coefficient of x^(n(n+1)/4) in Product_{k=1..n} (1+x^k) if n = 0 or 3 mod 4 else a(n) = 0
.Experimente online!
Explicação
fonte
Casca , 9 bytes
Experimente online!
Explicação
fonte
Gol> <> , 26 bytes
Experimente online! ou Execute casos de teste de 1 a 16!
Como funciona
fonte