El objetivo es calcular todos los cuadrados hasta x
con suma y resta.
Reglas:
- El código debe ser una función que tome el número total de cuadrados para generar y devuelva una matriz que contenga todos esos cuadrados.
- Puede no utilizar cadenas, estructuras, multiplicación, división, o funciones integradas para calcular cuadrados.
- Solo puede usar matrices, enteros (números enteros), suma, resta. ¡No se permiten otros operadores!
Esta es una pregunta de código de golf , por lo que gana el código más corto en bytes.
Respuestas:
APL - 10
Ejemplo de uso:
ngn APL demo
fuente
+\1+⍳+⍳
C,
5552 bytessimplemente suma números impares
n
: número de cuadrados para calcularr
: matriz de salida para almacenar los resultadosj
: toma los valores sucesivos 1, 3, 5, 7, ...i
: se incrementaj
en cada iteraciónEditar
Se pueden guardar 4 caracteres utilizando la declaración int implícita (> C99), pero esto cuesta 1 carácter porque los
for
inicializadores no pueden contener una declaración en> C99. Entonces el código se convierteUso
Salida
fuente
GolfScript, 17 caracteres
Uso (ver también ejemplos en línea ):
Nota:
*
es un bucle y no el operador de multiplicación.fuente
,
toma la entrada y la convierte a la matriz[0 1 ... n-1]
. Luego*
inyecta el bloque de código dado en la matriz. Este bloque primero duplica el elemento actual (.+
) resta uno ((
) y luego agrega el resultado anterior1$+
(en otras palabras, suma2j-1
al número cuadrado anterior).[]
encierra todo para devolver una nueva matriz.Lote de Windows, 115 bytes
Esto debe colocarse en un archivo por lotes en lugar de ejecutarse desde cmd, y genera la lista en la consola. Se necesita el número de cuadrados para crear desde el primer argumento de línea de comandos.
&
Sin embargo, en su mayor parte utiliza en lugar de líneas nuevas, todavía se necesita una y cuenta como dos bytes.Necesita expansión variable retardada habilitada, esto se puede hacer con
cmd /v:on
. Asumiendo que no es así,setlocal enabledelayedexpansion&
se necesitaba un extra al inicio (sin él, el script tiene 83 bytes).fuente
Haskell - 30
Esto usa el hecho de que
(n+1)^2=n^2+2n+1
fuente
Perl, 27 bytes
Matemáticas:
Script para llamar a la función para imprimir 10 cuadrados:
Resultado:
Ediciones:
pop
en lugar deshift
(−2 bytes, gracias skibiranski )fuente
JavaScript: 32 caracteres
Asume que
x
existe una variable y crea una matriza
de cuadrados para los valores1..x
.ECMAScript 6 - 27 caracteres
Las llamadas
f(x)
llenarán la matrizb
con los cuadrados para los valores0..x
.fuente
i+++i
al final ...?k+=i+++i
es lo mismok += i + (++i)
que lok+=i+i+1
seguido pori=i+1
b=[f=i=>b[i]=i&&i+--i+f(i)]
. Ej .).Julia - 33
Cualquier número cuadrado se puede escribir mediante una suma de números impares:
fuente
C ++
9981788078mi primer intento en code-golf
este código se basa en
un xn = 2 - 1
, donde n es el recuento plazo y una es n º plazo en la siguiente serie
1, 3, 5, 9, 11, 13, .....
suma de 2 primeros términos = 2 al cuadrado
suma de los primeros 3 términos = 3 al cuadrado
y así sucesivamente ...
fuente
{}
después delfor
ciclo, ya que solo hay una declaración. Esto puede reducir el recuento de carbón por 2addition, subtraction
, solo estoy usando esosConjunto DCPU-16 (90 bytes)
Escribí esto en ensamblado para un procesador ficticio, porque ¿por qué no?
Se espera que el número esté en el registro X, y se espera que otros registros sean 0. Los resultados se envían a la pila, se romperá una vez que llegue a 65535 debido a la arquitectura de 16 bits. Es posible que desee agregar un
SUB PC, 1
al final para probarlo. Compilado, el programa debe tener 20 bytes (10 palabras).fuente
Haskell
Básicamente, esto inventa la multiplicación, la usa y la mapea sobre todos los números.
f 10
=[0,1,4,9,16,25,36,49,64,81]
. Tambiénf 91
=[0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529,576,625,676,729,784,841,900,961,1024,1089,1156,1225,1296,1369,1444,1521,1600,1681,1764,1849,1936,2025,2116,2209,2304,2401,2500,2601,2704,2809,2916,3025,3136,3249,3364,3481,3600,3721,3844,3969,4096,4225,4356,4489,4624,4761,4900,5041,5184,5329,5476,5625,5776,5929,6084,6241,6400,6561,6724,6889,7056,7225,7396,7569,7744,7921,8100]
.fuente
Haskell, 34/23
o, si las importaciones están bien:
Salida:
fuente
Javascript 47
function f(n,a){return a[n]=n?f(n-1,a)+n+n-1:0}
r=[];f(12,r);console.log(r)
devoluciones :[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144]
fuente
f=(n,a)=>a[n]=n?f(n-1,a)+n+n-1:0
.Smalltalk, 52
Devuelve una nueva matriz (es decir, no se llena o agrega a una existente).
llamada:
valor f: 10
-> # (1 4 9 16 25 36 49 64 81100)
fuente
pitón - 39
Reemplazar
5
con cualquier valor. ¿Alguna sugerencia?fuente
Bash -
928562615957Resultado:
Editar: Reemplacé el bucle interno con el algoritmo de la solución Haskell de @ mniip.
fuente
Mismo método que el anterior, en APL y J:
APL:
F←{+\1+V+V←¯1+⍳⍵}
(17 caracteres) funciona con la mayoría de las variantes de APL (pruébelo aquí )e incluso menos (solo 14 caracteres) con NGN APL:
F←{+\1+V+V←⍳⍵}
(ver aquí )J:
f=:+/\@(>:@+:@:i.)
(18 caracteres)editar: mejor solución en APL:
F←{+\¯1+V+V←⍳⍵}
(15 caracteres)fuente
C # (82)
fuente
C # - 93
Cuando se llama desde otro método de la misma clase, devolverá la matriz -
[1,4,9,16,25,36...]
, hasta ell
elemento th.fuente
int[]
ysq
? No sé C #, pero creo que debería funcionar.int[]sq
lugar deint[] sq
y enint[]res
lugar deint[] res
. Esto te ayuda a guardar dos caracteres, y no obtuve ningún error de compilación con eso. También debe usar identificadores de un solo carácter parasq
yres
como sugirió.Fortran II | IV | 66 | 77,
134122109105Editar: eliminó el bucle interno y usó el algoritmo Haskell de @mniip en su lugar.
Editar: Verificado que la subrutina y el controlador son válidos Fortran II y IV
Conductor:
Resultado:
fuente
Python - 51
Aquí estoy definiendo una función según lo solicitado por las reglas.
Uso
sum
de números impares:Esto solo usa
sum
(un builtin que realiza la suma) yrange
(un builtin que crea matrices usando la suma). Si se oponesum
, podemos hacer esto conreduce
:fuente
PHP, 92 bytes
Esto debe tener habilitada la opción "etiquetas cortas", por supuesto (para eliminar 3 bytes al inicio).
Salida:
fuente
Adelante - 48 bytes
Uso:
Salida:
fuente