Dado (por cualquier medio) dos números naturales diferentes (de cualquier tamaño razonable), genera (por cualquier medio) el cuadrado de su suma como en los ejemplos a continuación:
Dado 4 y 3, salida:
12 12 12 12 9 9 9
12 12 12 12 9 9 9
12 12 12 12 9 9 9
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
16 16 16 16 12 12 12
Dado 1 y 3, salida:
3 9 9 9
3 9 9 9
3 9 9 9
1 3 3 3
El espacio en blanco puede variar dentro de lo razonable, pero las columnas deben estar alineadas a la izquierda, a la derecha o (pseudo-) centradas.
Una nueva línea final está bien, pero las lagunas estándar no lo están.
Este es el código de golf, por lo tanto, incluya un encabezado como # LanguageName, 123
en su respuesta, donde el número son caracteres (bytes para idiomas que no están basados en texto). El código de embalaje para caracteres Unicode grandes no está permitido.
Bonificación: -3 si su código genera solo un cuadrado cuando uno de los números es 0; Por ejemplo, dado 0 y 3, salida:
9 9 9
9 9 9
9 9 9
Respuestas:
J, 9 bytes - 3 = 6
Inspirado por la respuesta APL de @ NBZ, jugado por @randomra. Esto define un verbo que toma una matriz de números. Se usa de la siguiente manera:
También reclamo el bono de 3 bytes, ya que una entrada de 0 produce submatrices de tamaño cero:
Explicación
J tiene una ventaja definitiva en este desafío. Además de los problemas de manipulación de la matriz para el desayuno, imprime matrices 2D en el formato correcto de forma predeterminada.
fuente
table flipper
emoticón ASCII (╯ ° □ °) ╯︵ ┻━┻Octava, 45 bytes - 3 = 42
Explicación
Esto construye dos vectores (supongamos
m = 4
yn = 3
):ones(n, 1)
construye una serie de unidades de tamañon x 1
, por lo que multiplicando las unidades porn
:Luego, los vectores se multiplican en forma de elementos, con expansión de difusión automática para que los vectores de 7 elementos produzcan una matriz de 7x7 elementos:
Por ejemplo, la multiplicación de la primera fila de
a
porb
da:Y de manera similar para las filas restantes de
a
.Salida:
Puedes probarlo aquí en ideone
fuente
s=
. Tenemos la convención de que las funciones / lambdas anónimas no tienen que almacenarse en una variable.Dyalog APL , 10-3 = 7
Inspirado * por esta respuesta donde los argumentos se replican y luego se usan en una tabla de multiplicar:
⎕
Emite un prompt (⎕:
) y evalúa cualquier expresión ingresada en ese momento. (Por razones de seguridad, esto no funciona en TryAPL pero funciona en NGN / APL )./⍨
Replica su argumento en sí veces (/⍨4 3
⇔3 3 3 4 4 4 4
)∘.×⍨
Crea una tabla de multiplicación.⊖
Voltea boca abajo.Esto sucede para trabajar en cualquier entrada de longitud (la entrada está sangrada 6 espacios, la salida está en el margen izquierdo):
* Originalmente, tenía una solución diferente en mente: cada rectángulo se crea por separado creando una tabla de multiplicación para cada combinación de los dos argumentos. Luego, los cuatro cuadrados se reparan vertical y horizontalmente. Se parece a esto:
⎕
Rápido, como arriba.,⍴×<
Combina (,
) los args y úsalo para dar forma (⍴
) a un rectángulo lleno de su producto (×
).∘.(
...)⍨
Cree una tabla donde cada celda sea lo que se especifica en(
...)
⊖
Voltee verticalmente.⍪⌿
Combina celdas verticalmente.,/
Combina las celdas horizontalmente.fuente
(|.*/])@#~
R, 31-3 = 28
Explicación:
Esto también funciona para más de dos números. Por ejemplo, la salida para (5,3,2) se ve así:
fuente
cat
owrite
con el fin de que sea una respuesta válida.Haskell,
153125bytes - 3 = 122La mitad del código es para formatear la salida. Funciona para enteros grandes arbitrarios. Salida de ejemplo:
A veces hay un espacio en blanco adicional entre los números, porque estoy calculando el espacio necesario en
x*x+y*y
lugar demax (x*x) (y*y)
, por ejemploPero es como máximo un espacio en blanco.
fuente
Mathematica 56-3 = 53
Actualización : agregué un segundo método, precisamente del mismo tamaño de código, que usa una función con nombre. Emplea un en
Array
lugar de unTable
pero sigue la misma lógica. (Vea abajo.)Método 1
Esto crea una tabla de productos, cuyos factores dependen de los valores de la fila y la columna. El par de números se ingresa como una lista de enteros. Las funciones anónimas como las siguientes son más útiles si se usan solo una vez en un programa. De lo contrario, tiene más sentido usar una función con nombre.
Cada factor es una declaración If-then:
If[r>#2,#,#2]
significa, "Si el número de fila es mayor que la segunda entrada, use la primera entrada como factor, de lo contrario use la segunda entrada.If[c>#,#2,#]
significa, "Si el número de columna es mayor que la primera entrada, use la segunda entrada como factor, de lo contrario use la primera entrada.Ejemplo 1
Ejemplo 2
Método 2 (también 56-3 = 53)
Esto funciona de manera similar al Método 1. Pero requiere menos código cuando se llama. Y las celdas son direccionables, a diferencia de las celdas de una tabla. Este método es mejor si la función se usará más de una vez.
Los ejemplos de arriba son producidos por lo siguiente:
Ej 1:
Ej 2:
fuente
Octava, 34 - 3 = 31
Ejemplos:
fuente
repelems
existía. ¡Increíble!CJam, 27 bytes - 3 = 24
Toma datos como una matriz de estilo CJam. Utiliza un poco más de espacio del necesario, pero creo que está "dentro de lo razonable", y siempre está correctamente alineado.
Pruébalo aquí.
Explicación
fuente
Función C (usando glibc), 122 bytes - 3 = 119
Implementación principalmente directa con 2 bucles. Espero que haya algunas oportunidades de golf que he perdido aquí:
Las entradas se pasan en los dos primeros parámetros de la función, los otros dos son dummies. Las columnas están alineadas a la derecha.
Tenga en cuenta que glibc
puts()
siempre parece devolver el número de bytes escritos, incluida la nueva línea final implícita, que es lo que necesitamos aquí. No hay garantías de que esto funcione con cualquier otra libc.En un programa completo:
Compilar como
gcc sqrbin.c -o sqrbin
(omake sqrbin
). Las advertencias pueden ser ignoradas de manera segura.Salida de ejemplo:
fuente
puts()
depende de la máquina. Son las 10 de la mía, por ejemplo. Además, aquí hay un consejo: por lo general, puede comprimir dos bucles en uno si incrementa condicionalmente el contador en el bucle externo. Mi solución demuestra cómo se puede hacer.puts()
código de retorno solo se garantiza que será + ve para el éxito. Sin embargo, mis pruebas con glibc parecen mostrar que el valor de retorno es el número de bytes escritos. En cuanto a la consolidación del bucle, sí, soy consciente de esa técnica y lo he intentado aquí, hasta ahora sin acortamiento en este caso.Rubí, (133 - 3) = 130 bytes
para 4,3
para 1,3
por 0,3
fuente
1
y un gran número como9999
. De lo ques
saldrá como4
, por lo que está rellenando a un ancho des+3 = 7
pero9999^2
necesita 8 dígitos. Es posible que desee utilizar2*s
en su lugar.rjust
antes de hacerloljust
. Se puede acortarprint
a$><<
(y deshacerse del espacio después de ella).ARGV
tiene un alias$*
. Es posible que pueda evitarloflatten
creando su matriz con algo como esto: codegolf.stackexchange.com/a/19493/8478 . Además, las respuestas solo de función definitivamente están permitidas por aquí (incluso funciones sin nombre), por lo que esa función podría tomar los enteros como entradas, y no tendría que hacer nada.to_i
.Python 2, 176 bytes - 3 = 173
Esto utiliza funciones de cadena de Python para crear una cuadrícula de caracteres, luego reemplaza los caracteres con enteros e imprime la salida formateada.
fuente
Matlab, 58-3 = 55
Usando una función anónima:
Ejemplo:
(Solución anterior) 59-3 = 56
Usando una función anónima:
fuente
C, (125-3) bytes
La entrada se toma como dos enteros separados por espacios en la misma línea. Cada celda se rellena con espacios al doble de la longitud de la cadena de entrada.
fuente
Pyth, 39-3 = 36
Pyth no tiene un formato de matriz incorporado, lo que aumenta enormemente el tamaño, ya que uno tiene que rellenar manualmente los números de salida. Esto es lo que se me ocurrió.
Pruébalo en línea.
fuente
Bloques , 51 bytes
52628287(no competitivos)Sin golf:
Intentalo
fuente