Retirado de: OEIS- A071816
Sua tarefa, com um limite superior de n
, é encontrar o número de soluções que satisfazem a equação:
a+b+c = x+y+z, where 0 <= a,b,c,x,y,z < n
A sequência começa como descrito na página OEIS e abaixo (indexado 1):
1, 20, 141, 580, 1751, 4332, 9331, 18152, 32661, 55252, 88913, 137292, 204763, 296492, 418503, 577744, 782153, 1040724, 1363573, 1762004, 2248575, 2837164, 3543035, 4382904, 5375005, 6539156, 7896825, 9471196, 11287235, 13371756
Pois n = 1
, há apenas uma solução:(0,0,0,0,0,0)
Pois n = 2
existem 20 soluções ordenadas (a,b,c,x,y,z)
para a+b+c = x+y+z
:
(0,0,0,0,0,0), (0,0,1,0,0,1), (0,0,1,0,1,0), (0,0,1,1,0,0), (0,1,0,0,0,1),
(0,1,0,0,1,0), (0,1,0,1,0,0), (0,1,1,0,1,1), (0,1,1,1,0,1), (0,1,1,1,1,0),
(1,0,0,0,0,1), (1,0,0,0,1,0), (1,0,0,1,0,0), (1,0,1,0,1,1), (1,0,1,1,0,1),
(1,0,1,1,1,0), (1,1,0,0,1,1), (1,1,0,1,0,1), (1,1,0,1,1,0), (1,1,1,1,1,1).
I & O
- A entrada é um único número inteiro que indica
n
. - A saída é um único número inteiro / cadeia de caracteres
f(n)
, ondef(...)
está a função acima. - A indexação é exatamente como descrito, nenhuma outra indexação é aceitável.
Isso é código-golfe , vitórias mais baixas na contagem de bytes.
Respostas:
Geléia ,
96 bytesSolução O (n 6 ) .
Experimente online!
Como funciona
fonte
O(n^6)
: P.Mathematica 17 ou 76 bytes
Usando a fórmula:
(Salvou 3 bytes por @GregMartin e @ngenisis)
Em vez de usar a fórmula, aqui eu literalmente computo todas as soluções e as conto.
fonte
11/20
por.55
uma economia de dois bytes.Haskell , 48 bytes
Eu não percebi a fórmula antes de escrever isso, então definitivamente não é o método geral mais curto (ou mais rápido), mas achei que era bonito.
Experimente online!
f n
gera todas as listas de 6 elementos de[1..n]
e depois conta aqueles cuja soma alternada é 0. Usa o fato de quea+b+c==d+e+f
é o mesmo quea-(d-(b-(e-(c-f))))==0
, e também que não importa se adicionamos 1 a todos os números.fonte
MATL , 12 bytes
Experimente online!
Explicação
Não pude perder a chance de usar a convolução novamente!
Isso faz uso da seguinte caracterização do OEIS:
e, é claro, a multiplicação polinomial é convolução.
fonte
Geléia , 9 bytes
Não é tão curto quanto o de Dennis, mas termina em menos de 20 segundos para entrada
100
.Experimente online!
Como funciona
fonte
Pitão,
1312 bytesGuardou um byte graças a Leaky Nun.
Explicação
fonte
/LJJ
vez dem/JdJ
.Python 3 , 28 bytes
Experimente online!
fonte
TI-BASIC, 19 bytes
Avalia a fórmula OEIS.
fonte
Prompt x
= 2 bytes?Oásis , 17 bytes
Experimente online!
Oasis é uma linguagem baseada em pilha otimizada para seqüências recorrentes. No entanto, a fórmula de recursão seria muito longa para este caso.
fonte
Braquilog , 17 bytes
Experimente online!
Explicação
fonte
ᶜ
deve vir automaticamente com≜
ᶜ
por si só, é um metapredicado.JavaScript, 24 bytes
Usa a fórmula da página OEIS.
Experimente online!
fonte
x=>x**5*.55+x**3/4+x/5
Oitava ,
252321 bytesExperimente online!
Usa a fórmula da entrada OEIS. Salvei
doisquatro bytes reorganizando a fórmula e usando em.55
vez de11/20
, graças a fəˈnɛtɪk.fonte
Python 2.7,
1091059996 bytesAgradecemos à ETHproductions e ao Dennis por salvar alguns bytes:
fonte
sum(sum(x[:3])==sum(x[3:])for x ...)
seria ainda mais curto. Além disso,from itertools import*
salva um byte.for
. Além disso, não exigimos que as funções sejam nomeadas por padrão, para que você possa removê-lash=
.Mathematica, 52 bytes
A implementação de Kelly Lowder da fórmula OEIS é bem mais curta, mas isso calcula os números diretamente:
Bem, na verdade conta o número de soluções
1 <= a,b,c,x,y,z <= n
. Este é o mesmo número, pois adicionar 1 a todas as variáveis não altera a igualdade.Explicação:
Range@#~Tuples~6
torna todas as listas de seis números inteiros entre 1 e n,#~Partition~3&/@
divide cada lista em duas listas de comprimento 3,Tr/@
soma essas sublistas eCount[...,{n_,n_}]
conta quantos pares têm a mesma soma. Eu tive muita sorte com a ordem de precedência entref @
,f /@
e~f~
!fonte
Oitava , 41 bytes
Experimente online!
Semelhante à minha resposta MATL , mas calcula a convolução por meio de uma transformada de Fourier discreta (
fft
) com um número suficiente de pontos (n^2
).~~(1:n)
é usado como uma versão mais curta doones(1,n)
.round
é necessário devido a erros de ponto flutuante.fonte
CJam , 17 bytes
A entrada de
11
tempo limite no TIO e12
a memória ficar mais alta.Experimente online!
Explicação
fonte
Clojure, 79 bytes
Toneladas de repetição no código, em um número maior de variáveis, uma macro pode ser menor.
fonte