Escrever um programa ou função para saída a soma de números quadrados ímpares (OEIS # A016754) menos de uma entrada n
.
Os primeiros 44 números da sequência são:
1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089,
1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481,
3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569
A fórmula para a sequência é a(n) = ( 2n + 1 ) ^ 2
.
Notas
- O comportamento do seu programa pode ser indefinido
n < 1
(ou seja, todas as entradas válidas são>= 1
).
Casos de teste
1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650
code-golf
arithmetic
Thomas
fonte
fonte
Respostas:
Gelatina, 6 bytes
Experimente online! ou verifique todos os casos de teste .
fundo
Para todos os números inteiros positivos k , temos 1² + 3² + ⋯ + (2k - 1) ² = k (2k - 1) (2k +1) ÷ 3 .
Como existem m C r = m! ÷ ((mr)! R!) R - combinações de um conjunto de m elementos, o acima pode ser calculado como (2k + 1) C 3 = (2k + 1) 2k (2k - 1) ÷ 6 = k (2k - 1) (2k + 1) ÷ 3.
Para aplicar a fórmula, devemos encontrar os 2k + 1 mais altos, de modo que (2k - 1) ² <n . Ignorando a paridade por um momento, podemos calcular o m mais alto, de modo que (m - 1) ² <n como m = ceil (srqt (n)) . Para incrementar condicionalmente m, se for par, simplesmente calcule m | 1 (OR bit a bit com 1 ).
Como funciona
fonte
JavaScript (ES6), 30 bytes
31 bytes se
f(1)
precisar retornar zero em vez de falso:fonte
05AB1E ,
108 bytesCódigo:
Explicação:
Pode vir a calhar:
t;L·<nO
.Usa a codificação CP-1252 . Experimente online! .
fonte
Haskell, 30 bytes
Surpreendentemente normal.
fonte
C #,
126131 bytesVersão editada para estar de acordo com a nova pergunta:
Usando limite codificado:
fonte
# Language name, number bytes
para consistência.Console.Read
no final?namespace
s não são necessários para arquivos únicos.System.Console.Write(s);
isso se funcionar e se não precisar doConsole.Read
.Gelatina, 7
Experimente online ou tente uma versão modificada para vários valores
Shh ... Dennis está dormindo ...
Obrigado ao Sp3000 no chat por sua ajuda!
Explicação:
fonte
R,
3836 bytesO @ Giuseppe salvou dois bytes movendo
x
- se para a lista de argumentos para salvar os chavetas. Idéia legal!Ungolfed
Experimente online!
fonte
x
- se para um argumento de função padrão e, em seguida, poderá remover os chaves.C,
51, 5048 bytesPorque por que não jogar golfe em uma das línguas mais detalhadas? (Ei, pelo menos não é Java!)
Experimente online!
Programa completo, com E / S de teste:
fonte
most verbose languages
Mais Golfy do que Python, C #, LISP, Forth, etc, C é realmente bom bastante para o golfe< 50 bytes
. Além disso, há um meta post relevante aqui .Na verdade, 7 bytes
Experimente online!
Também para 7 bytes:
Experimente online!
Isso usa a mesma fórmula da resposta de Dennis's Jelly.
Explicação:
fonte
Literally
?Oitava, 23 bytes
Teste:
fonte
CJam, 15 bytes
Experimente online!
Soluções 10000 codificadas:
Solução de 12 bytes de Martin:
Minha solução original de 13 bytes:
Experimente online!
fonte
Pitão, 10 bytes
Suíte de teste
Explicação:
fonte
s<#Q%2t^R2
Mathcad, 31 "bytes"
Observe que o Mathcad usa atalhos de teclado para inserir vários operadores, incluindo a definição e todos os operadores de programação. Por exemplo, ctl-] insere um loop while - ele não pode ser digitado e só pode ser digitado usando o atalho de teclado ou na barra de ferramentas Programação. "Bytes" são considerados o número de operações do teclado necessárias para inserir um item do Mathcad (por exemplo, nome da variável ou operador).
Como não tenho chance de vencer essa competição, pensei em acrescentar um pouco de variedade à versão direta da fórmula.
fonte
Raquete, 57 bytes
fonte
MATL , 10 bytes
EDIT (30 de julho de 2016): o código vinculado substitui
9L
por1L
para se adaptar às alterações recentes no idioma.Experimente online!
fonte
Python, 39 bytes
Se, por
n=1
, é válido produzir emFalse
vez de0
, podemos evitar a conversão de caso base para obter 37 bytesÉ estranho que eu não tenha encontrado um caminho mais curto para chegar
0
pori*i>=n
e diferente de zero caso contrário. No Python 2, ainda se obtém 39 bytes comfonte
bool
é uma subclasse deint
em Python, o que significa queFalse
é um valor aceitável para0
.Python,
4238 bytesfonte
Python 2, 38 bytes
Baseado na fórmula de Dennis , com
s==-2*k
. Produz um flutuador. Com efeito, a entrada é quadrada, decrementada e arredondada para o próximo número par.fonte
PARI / GP ,
333226 bytesAdaptado do código de Dennis :
Minha primeira ideia (30 bytes), usando uma fórmula polinomial simples:
Esta é uma implementação eficiente, na verdade não muito diferente da versão não destruída que eu escreveria:
Uma implementação alternativa (37 bytes) que faz um loop sobre cada um dos quadrados:
Outra solução alternativa (35 bytes) demonstrando a soma sem uma variável temporária:
Outra solução, não particularmente competitiva (40 bytes), usando a norma L 2 . Isso seria melhor se houvesse suporte para vetores com índices de tamanho de etapa. (Pode-se imaginar a sintaxe
n->norml2([1..((n-1)^.5+1)\2..2])
que diminuiria 8 bytes.)fonte
Haskell,
3231 bytesExemplo de uso:
(#1) 9802
->166650
.Edit: @xnor salvou um byte, com uma compreensão inteligente da lista. Obrigado!
fonte
n#x=sum[x^2+n#(x+2)|x^2<n]
Julia, 29 bytes
Esta é uma função recursiva que aceita um número inteiro e retorna um número inteiro.
Começamos um índice em 1 e, se seu quadrado for menor que a entrada, pegamos o quadrado e adicionamos o resultado de recusar o índice + 2, o que garante que os números pares sejam ignorados, caso contrário, retornamos 0.
fonte
Oracle SQL 11.2, 97 bytes
fonte
Julia, 26 bytes
Isso constrói o intervalo de todos os números inteiros positivos ímpares abaixo de n e a matriz dos quadrados dos números inteiros nesse intervalo e calcula a soma dos números inteiros nos dois iteráveis.
Experimente online!
fonte
Reng v.3.3, 36 bytes
Experimente aqui!
Explicação
1: inicialização
Define
c
para0
(o contador) e a entradaI
para om
machado.1ø
vai para a próxima linha.2: loop
:
duplica o valor atual (o número ímpar ao quadrado) e [Im
coloca om
machado para baixo. Usei o truque menos do que em outra resposta , que uso aqui.%:1,e
verifica se o STOS <TOS. Se for,q^
sobe e interrompe o ciclo. De outra forma:c
coloca o balcão no chão,2*
dobra,1+
adiciona um e o coloca ao²
quadrado.c1+#C
incrementac
e o loop continua novamente.3: final
$
descarta o último valor (maior que o desejado),a+¡
adiciona até que o comprimento da pilha seja 1,n~
sai e termina.fonte
Clojure, 53 bytes
Você pode conferir aqui: https://ideone.com/WKS4DA
fonte
Mathematica 30 bytes
Esta função sem nome esquadrinha todos os números ímpares menos que a entrada (
Range[1,Sqrt[#-1],2]
) e os adiciona.fonte
PHP, 64 bytes
Expandido:
Em cada iteração do
for
loop, ele irá adicionar 2 a k e verifique se k 2 é menor que$i
, se for add k 2 para$a
.fonte
R, 60 bytes
Faz exatamente como descrito no desafio, incluindo retornar 0 para o caso n = 1. Degolfado, ';' representa quebra de linha em R, ignorado abaixo:
fonte
Java 8,
12811911711149 bytesBaseado na solução C # da @Thomas .
Explicação:
Experimente online.
fonte
Python 2, 49 bytes
Isso acabou sendo mais curto que um
lambda
.Experimente online
Meu menor
lambda
, 53 bytes :fonte