Escriba un programa o función para generar la suma de los números cuadrados impares (OEIS # A016754) menos que una entrada n
.
Los primeros 44 números en la secuencia son:
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
La fórmula para la secuencia es a(n) = ( 2n + 1 ) ^ 2
.
Notas
- El comportamiento de su programa puede estar indefinido
n < 1
(es decir, todas las entradas válidas son>= 1
).
Casos de prueba
1 => 0
2 => 1
9 => 1
10 => 10
9801 => 156849
9802 => 166650
10000 => 166650
code-golf
arithmetic
Thomas
fuente
fuente
Respuestas:
Jalea, 6 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Antecedentes
Para todos los enteros positivos k , tenemos 1² + 3² + ⋯ + (2k - 1) ² = k (2k - 1) (2k +1) ÷ 3 .
Como hay m C r = m! ÷ ((mr)! R!) R -combinaciones de un conjunto de elementos m , lo anterior se puede calcular como (2k + 1) C 3 = (2k + 1) 2k (2k - 1) ÷ 6 = k (2k - 1) (2k + 1) ÷ 3.
Para aplicar la fórmula, debemos encontrar el 2k + 1 más alto tal que (2k - 1) ² <n . Ignorando la paridad por un momento, podemos calcular la m más alta tal que (m - 1) ² <n como m = ceil (srqt (n)) . Para incrementar condicionalmente m si es par, simplemente calcule m | 1 (bit a bit O con 1 ).
Cómo funciona
fuente
JavaScript (ES6), 30 bytes
31 bytes si
f(1)
necesita devolver cero en lugar de falso:fuente
05AB1E ,
108 bytesCódigo:
Explicación:
Puede ser útil:
t;L·<nO
.Utiliza la codificación CP-1252 . Pruébalo en línea! .
fuente
Haskell, 30 bytes
Sorprendentemente de aspecto normal.
fuente
C #,
126131 bytesVersión editada para cumplir con la nueva pregunta:
Usando límite codificado:
fuente
# Language name, number bytes
por coherencia.Console.Read
al final?namespace
s no son necesarios para archivos individuales.System.Console.Write(s);
si funciona y no necesita elConsole.Read
.Gelatina, 7
Pruébelo en línea o pruebe una versión modificada para múltiples valores
Shh ... Dennis está durmiendo ...
¡Gracias a Sp3000 en el chat por su ayuda!
Explicación:
fuente
R,
3836 bytes@Giuseppe guardó dos bytes moviéndose
x
a la lista de argumentos para guardar las llaves. ¡Buena idea!Sin golf
Pruébalo en línea!
fuente
x
a un argumento de función predeterminado y luego puede quitar las llaves.C,
51, 5048 bytes¿Por qué no jugar al golf en uno de los idiomas más detallados? (¡Oye, al menos no es Java!)
Pruébalo en línea!
Programa completo sin golf, con prueba de E / S:
fuente
most verbose languages
Más golfístico que Python, C #, LISP, Forth, etc., C es realmente bastante bueno para el golf< 50 bytes
. Además, hay una meta publicación relevante aquí .En realidad, 7 bytes
Pruébalo en línea!
También para 7 bytes:
Pruébalo en línea!
Utiliza la misma fórmula que en la respuesta de Dennis's Jelly.
Explicación:
fuente
Literally
?Octava, 23 bytes
Pruebas:
fuente
CJam, 15 bytes
Pruébalo en línea!
Soluciones 10000 codificadas:
Solución de 12 bytes de Martin:
Mi solución original de 13 bytes:
Pruébalo en línea!
fuente
Pyth, 10 bytes
Banco de pruebas
Explicación:
fuente
s<#Q%2t^R2
Mathcad, 31 "bytes"
Tenga en cuenta que Mathcad usa métodos abreviados de teclado para ingresar varios operadores, incluida la definición y todos los operadores de programación. Por ejemplo, ctl-] ingresa un ciclo while; no se puede escribir y solo se puede ingresar usando el atajo de teclado o desde la barra de herramientas de Programación. Se considera que los "bytes" son la cantidad de operaciones de teclado necesarias para ingresar un elemento de Mathcad (por ejemplo, nombre de variable u operador).
Como no tengo ninguna posibilidad de ganar esta competencia, pensé en agregar un poco de variedad con una versión de fórmula directa.
fuente
Raqueta, 57 bytes
fuente
MATL , 10 bytes
EDITAR (30 de julio de 2016): el código vinculado se reemplaza
9L
por1L
para adaptarse a los cambios recientes en el idioma.Pruébalo en línea!
fuente
Python, 39 bytes
Si, por
n=1
, es válido para la salida enFalse
lugar de0
, entonces podemos evitar la conversión del caso base para obtener 37 bytesEs extraño que no he encontrado un camino más corto para llegar
0
ai*i>=n
y distinto de cero de otra manera. En Python 2, uno todavía obtiene 39 bytes confuente
bool
es una subclase deint
en Python, lo que significa queFalse
es un valor aceptable para0
.Python,
4238 bytesfuente
Python 2, 38 bytes
Basado en la fórmula de Dennis , con
s==-2*k
. Emite un flotador. En efecto, la entrada tiene raíz cuadrada, disminuye, luego se redondea al siguiente número par.fuente
PARI / GP ,
333226 bytesAdaptado del código de Dennis :
Mi primera idea (30 bytes), usando una fórmula polinómica simple:
Esta es una implementación eficiente, en realidad no muy diferente de la versión sin golf que escribiría:
Una implementación alternativa (37 bytes) que recorre cada uno de los cuadrados:
Otra solución alternativa (35 bytes) que demuestra la suma sin una variable temporal:
Otra solución, no particularmente competitiva (40 bytes), utilizando la norma L 2 . Esto sería mejor si hubiera soporte para vectores con índices de tamaño de paso. (Uno podría imaginar la sintaxis
n->norml2([1..((n-1)^.5+1)\2..2])
que dejaría caer 8 bytes).fuente
Haskell,
3231 bytesEjemplo de uso:
(#1) 9802
->166650
.Editar: @xnor guardó un byte, con una lista inteligente de comprensión. ¡Gracias!
fuente
n#x=sum[x^2+n#(x+2)|x^2<n]
Julia, 29 bytes
Esta es una función recursiva que acepta un entero y devuelve un entero.
Comenzamos un índice en 1 y si su cuadrado es menor que la entrada, tomamos el cuadrado y agregamos el resultado de recusar en el índice + 2, lo que garantiza que se omitan los números pares, de lo contrario devolvemos 0.
fuente
Oracle SQL 11.2, 97 bytes
fuente
Julia, 26 bytes
Esto construye el rango de todos los enteros positivos impares por debajo de n y la matriz de los cuadrados de los enteros en ese rango, luego calcula la suma de los enteros en ambos iterables.
Pruébalo en línea!
fuente
Reng v.3.3, 36 bytes
Pruébalo aquí!
Explicación
1: inicialización
Se establece
c
en0
(el contador) y la entradaI
alm
hacha.1ø
va a la siguiente línea2: bucle
:
duplica el valor actual (el número impar cuadrado) y [mem
ponem
hacha. Usé el truco menos que en otra respuesta , que uso aquí.%:1,e
comprueba si el STOS <TOS. Si es así,q^
sube y sale del bucle. De otra manera:c
baja el contador, lo2*
dobla,1+
agrega uno y lo²
cuadra.c1+#C
incrementosc
, y el bucle va de nuevo.3: final
$
deja caer el último valor (mayor que el deseado),a+¡
agrega hasta que la longitud de la pila es 1,n~
sale y termina.fuente
Clojure, 53 bytes
Puede verificarlo aquí: https://ideone.com/WKS4DA
fuente
Mathematica 30 bytes
Esta función sin nombre ajusta todos los números impares menos que la entrada (
Range[1,Sqrt[#-1],2]
) y los agrega.fuente
PHP, 64 bytes
Expandido:
En cada iteración del
for
ciclo, agregará 2 a k y verificará si k 2 es menor que$i
, si es agregar k 2 a$a
.fuente
R, 60 bytes
Hace exactamente como se describe en el desafío, incluido el retorno de 0 para el caso n = 1. Degolfed, ';' representa salto de línea en R, ignorado a continuación:
fuente
Java 8,
12811911711149 bytesResidencia en solución C # de @Thomas .
Explicación:
Pruébalo en línea.
fuente
Python 2, 49 bytes
Esto terminó siendo más corto que a
lambda
.Pruébalo en línea
El más corto
lambda
, 53 bytes :fuente